目录
- 一、MySQL登陆
- 1.配置MySQL环境变量
- 2.MySQL登陆命令
- 二、MySQL基础知识
- 1.数据类型
- (1)整型
- (2)浮点型
- (3)日期型
- (4)字符型
- (5)数据类型小结
- 2.MySQL的约束【重点】
- 3.数据库模型图
- (1)ishop
- (2)myschool
- 三、MySQL命令入门
- 1.数据库的操作
- (1)查看所有数据库
- (2)新建数据库
- (3)删除数据库
- (4)指向数据库
- 2.数据表的操作
- (1)新建数据表
- (2)删除数据表
一、MySQL登陆
1.配置MySQL环境变量
要让Windows在任意位置找到这个mysql.exe,则需要配置全局环境变量。
Linux中配置环境变量的 /etc/profile
环境变量配置完成后,需要重新打开cmd窗口,让配置生效即可。
Access denied for user ‘ODBC’@‘localhost’ (using password: NO)
- Access denied : 授权/登陆失败
- for:失败的原因
- user ‘ODBC’@‘localhost’ 用户’ODBC’在本地
- using password: NO 没有使用密码
从错误中找到两个关键点:用户名和密码没有提供给它
2.MySQL登陆命令
现在我们来认识下mysql的登陆的命令
mysql -u root -p
- -u user
- -p password 密码不在这行输入
C:\Users\naixi>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.30-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>exit
Bye
C:\Users\naixi>
如果需要远程访问另外一台计算机的SQL服务,则需要另外计算机的地址。
hostname:localhost
mysql -h 127.0.0.1 -P 3306 -u root -p
- -h host
- -P Port
C:\Users\naixi>mysql -h 127.0.0.1 -P 3306 -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.30-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
无论是配置环境变量还是登陆命令,只需要仔细!
二、MySQL基础知识
1.数据类型
(1)整型
今天的开发来说只用INT,其他的整数类型都不用了。
古老的计算机内存是很少很少的。128MB的时候,数据库优化工程师必须考虑这个字段的数据可能容纳的最大数据是多少,来合理分配字节数。那个时候,内存如果不够,就会发生内存溢出。
对于今天的我们来说,Windows的内存溢出已经不多见了,最早的安卓手机的内存很少,128MB开始发展。安卓手机内存溢出的表现是,程序闪退。
今天的计算机,特别是服务器,内存是以TB计算的。
1GB能容纳多少字节的数据呢?
(2)浮点型
DECIMAL(M,D),(10,2)表示整个的数值10位(包括小数点),小数点后面2位。-》小数点前面7位,小数点1位,小数2位
定点数据类型现在已经弃用了!
很久很久以前,计算机是32位运算宽度的。硬件缺陷导致数据不精确。
现在的CPU是64位的,就完全没有这样的问题。
32位的CPU在计算浮点型数据的时候导致精度缺失。用定点数据类型来解决浮点数精度缺失的问题。
解决方案:浮点数以字符串的形式保存,以数值的形式读取!
现在企业中已经不使用定点数据类型了,直接用double即可。哪些企业还在用呢?金融行业(银行)
浮点数的比较大小不能使用等号(32位)
if(32.1>31.2) (不推荐这样比较浮点型数据)
有兴趣的后浪们 了解即可
位类型BIT比特,现在也很少使用,极端场景才会使用的数据类型,以前比较用的多的是用来记录男/女,T/F,1/0这样的数据才会用。
(3)日期型
常用的datetime和timestamp
timestamp表示时间戳:数据科学家们以前提出个问题,如何记录一个相对确定的时间。
大家商议决定:记录一个时间点,从1970年1月1日0点开始的秒数/毫秒数为时间戳。
数据分析工程师偏向datetime,开发人员喜欢timestamp。两个时间类型是可以互相转换的。
(4)字符型
常见的数据类型使用char(字符)和varchar(字符串)
课后扩展:今天课后自行百度char和varchar的区别
char比较常见的使用场景是中文的男/女,是/否等数据的记录。
Text、。。。LongText是历史的产物,现在也已经弃用了。
例如LongText大约42亿个字节的长度,存储中文约20亿个中文字符。最早的使用场景是存放小说,文章,论文等中文数据。text类型被弃用的原因是,无法快速的完成中文搜索任务。
课后扩展:中文的搜索任务不是由MySQL这样的关系型数据库来完成的。使用的核心技术是反向索引技术。
(5)数据类型小结
MySQL常见的数据类型有INT、DOUBLE、DATETIME、TIMESTAMP、VARCHAR
建议:再面试之前,将本章节的数据类型再复习一遍,数据类型的占用字节数和范围需要背出来。
2.MySQL的约束【重点】
什么是约束?
完整性检查!完整性检查就是指检查数据的完整性和准确性!
MySQL数据库管理系统提供了一系列完整的机制来检查数据库、数据表中的数据是否满足规定的条件。以保证数据库、数据表中的数据的准确性和完整性(一致性)。这样的机制我称为约束!
约束的分类:MySQL的约束一共有6大约束
关键字 | 解释 |
---|---|
NOT NULL | 非空约束!就是表示被约束的这个字段的数据不能为空!! |
DEFAULT | 默认约束!规定当你没有给定数据的时候,使用默认值来填充数据!! |
UNIQUE KEY (UK) | 唯一约束!规定被约束的字段中的数据不能被重复! |
PRIMARY KEY (PK) | 主键约束!是用来作为一个数据表的唯一索引使用的,每个数值都能代表唯一的这一行数据!注意!!主键约束包含非空且唯一!! |
AUTO_INCREMENT | 自动增长约束!被约束的字段会自动从1开始,每添加1条数据自增1!! |
FOREIGN KEY (FK) | 外键约束!约束字段的取值范围受到外键的取值的约束! |
- NOT NULL
- DEFAULT
- UNIQUE KEY
- PRIMARY KEY
- AUTO_INCREMENT
自动增长本身没有意义,只是为了识别而识别的。
自动增长的约束的字段,必须为主键和整型!
- FOREIGN KEY
数据表中“子表”的字段的数据的取值范围受到的“父表”的取值范围的约束,我们称为外键约束!
先有父表/父表数据,再有子表/子表数据!先删子表/子表数据,再删父表/父表数据
3.数据库模型图
(1)ishop
一张表是父表还是子表是相对的,可能同时是另外两张表的父表和子表,也有可能同时为两张表的父表或子表
(2)myschool
三、MySQL命令入门
1.数据库的操作
SQL:
是一种操作数据库的通用语言。基本上所有的关系型数据库都支持这种语言。
SQL命令的分类,一般数上分为3类或者4类
- 数据定义语言DDL
数据定义语言DDL用来创建数据库中的各种对象
- 数据操纵语言DML
数据操纵语言DML主要有三种形式:新增insert、删除delete、更新update、[查询select]
- 数据控制语言DCL
数据控制语言DCL用来授予或回收访问数据库的某种特权
- 数据查询语言DQL
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块
(1)查看所有数据库
SHOW DATABASES;
上面的SQL语句是用来查询显示所有的数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.04 sec)
往往执行结果的反馈比查询结果更重要!
6 rows in set (0.04 sec) 在结果集中有6行数据,执行耗时0.04秒!
(0.00 sec) 如果出现0.00秒并不表示没有耗时,只是四舍五入被去掉了。
在上面这句命令中,最重要的并不是2个单词,而是最后的那个分号!!!
在MySQL中这个分号,命令结束标识符!MySQL以命令结束标识符为依据来执行命令,直到看见分号的时候,才执行前面的语句!
提示!上面出现的6个原始数据库中,
information_schema
mysql
performance_schema
sys
这里4个是系统数据库,在你对MySQL还不是很了解的情况下,不要去动他们,万一不小心删除或者更改了你不知道的数据,造成无法登陆的情况,只有一个结果。重装数据库!
(2)新建数据库
CREATE DATABASE database_name;
创建一个自己的数据库:
mysql> create database ishop;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ishop |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.00 sec)
对于MySQL数据库来说,我们有一个小问题,涉及到字符集的问题。
MySQL的默认字符集是Latin,写MySQL的那个开发人员是拉丁人!对于使用非英语系语言的国家的开发人员都存在同样字符集的问题。我们需要设置数据库的默认字符集为utf-8!
mysql> create database ishop default charset=utf8;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| ishop |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
7 rows in set (0.00 sec)
在MySQL中,没有-。直接是utf8
(3)删除数据库
DROP DATABASE database_name;
我们来删除我们刚才创建的ishop:
mysql> drop database ishop;
Query OK, 0 rows affected (1.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| world |
+--------------------+
6 rows in set (0.00 sec)
(4)指向数据库
USE database_name;
这句命令的作用是,指向当前正在操作的数据库;需要你使用这个命令明确告诉MySQL数据库我后面的命令是针对哪个数据库进行的操作!
示例:
mysql> # 显示所有数据表
mysql> show tables;
ERROR 1046 (3D000): No database selected
mysql> # 目前,MySQL出于游离状态,并没有指向任一的数据库
mysql> use ishop;
Database changed
mysql> # 这个时候,数据库的指针(这个指针并不存在,是我们假想出来的)指向了ishop
mysql> show tables;
Empty set (0.00 sec)
mysql> # 尝试切换数据库
mysql> use world;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
3 rows in set (0.00 sec)
mysql> use ishop;
Database changed
mysql>
2.数据表的操作
(1)新建数据表
创建数据的语法
CREATE TABLE table_name(
字段名称 数据类型 [约束],
字段名称 数据类型 [约束],
字段名称 数据类型 [约束]
);
小贴士:如果你发现的语句怎么看都是正确,但MySQL就是报错。请参照下面两句话
1.MySQL不会出错
2.如果有疑问请参照上面这句
小贴士:
int类型默认位最大长度int(11)
int->int(11)
varchar类型默认的长度为0
varcha->varchar(0)
我要求大家都不省略全部要写
新建商品类型表
mysql> create table commoditytype(
-> ct_id int(11) primary key,
-> ct_name varchar(50) not null
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> show tables;
+-----------------+
| Tables_in_ishop |
+-----------------+
| commoditytype |
+-----------------+
1 row in set (0.00 sec)
mysql>
新建商品表
mysql> create table commodity(
-> c_id int(11) primary key,
-> c_name varchar(50) not null,
-> c_madein varchar(50) not null,
-> c_type int(11) not null,
-> c_inprice int(11) not null,
-> c_outprice int(11),
-> c_num int(11) not null default '100',
-> constraint fk_1 foreign key (c_type) references commoditytype (ct_id)
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> show tables;
+-----------------+
| Tables_in_ishop |
+-----------------+
| commodity |
| commoditytype |
+-----------------+
2 rows in set (0.00 sec)
新建客户表
mysql> create table customer(
-> cu_id int(11) primary key,
-> cu_name varchar(50) not null,
-> cu_phone varchar(50) not null,
-> cu_gender int(11) not null default '1',
-> cu_address varchar(100) not null
-> );
Query OK, 0 rows affected (0.07 sec)
mysql> show tables;
+-----------------+
| Tables_in_ishop |
+-----------------+
| commodity |
| commoditytype |
| customer |
+-----------------+
3 rows in set (0.00 sec)
小贴士:
如何判断类似电话号码,身份证号码等数据是使用数值还是字符型?
你这个数据如果需要拿出来计算的,就需要设置数据类型为数值型,例如年龄。
其他的不可能存在计算的就使用字符型,例如电话号码。
新建订单表
mysql> create table `order`(
-> o_id int(11) primary key auto_increment,
-> o_cuid int(11) not null,
-> o_cid int(11) not null,
-> o_num int(11) not null,
-> constraint fk_2 foreign key (o_cuid) references customer (cu_id),
-> constraint fk_3 foreign key (o_cid) references commodity (c_id)
-> );
Query OK, 0 rows affected (1.13 sec)
mysql> show tables;
+-----------------+
| Tables_in_ishop |
+-----------------+
| commodity |
| commoditytype |
| customer |
| order |
+-----------------+
4 rows in set (0.00 sec)
(2)删除数据表
DROP TABLE table_name;