3-1-1 MySQL基础-数据库创建与修改,约束与索引

SQL语言分类

DML

添加 修改 删除 查询

DCL

用户 权限 事务

DDL

逻辑表 数据表 视图 索引

SQL语言注意事项

SQL语句不区分大小写,但是字符串区分大小写

SQL语句必须以分号结尾

SQL语句中的空白和换行没有限制,但是不能破坏语法

SQL语句的注释

1 # 这是单行注释
2 
3 /* 这是多行
4 *   注释
5 */

逻辑库操作

1 # 展示逻辑库
2 SHOW DATABASES;
3 # 新建逻辑库
4 CREATE DATABASE mingm;
5 # 删除逻辑库
6 DROP DATABASE mingm;
7 # 切换逻辑库
8 USE mingm;

数据库操作

CREATE TABLE 数据表(

  列名1 数据类型 [约束] [COMMENT 注释],

  列名2 数据类型 [约束] [COMMENT 注释]

) [COMMENT = 注释];

DROP 数据表;

 1 # 创建数据表
 2 CREATE TABLE t_student(
 3     id INT UNSIGNED PRIMARY KEY COMMENT 'ID',
 4     name VARCHAR(20) NOT NULL COMMENT '名字',
 5     sex CHAR(1) NOT NULL COMMENT '性别',
 6     birthday DATE NOT NULL COMMENT '生日',
 7     tel CHAR(11) NOT NULL COMMENT '号码',
 8     remark VARCHAR(200) COMMENT '备注'
 9 ) COMMENT = '学生表';
10 # 删除数据表
11 DROP TABLE t_student;
12 # 展示逻辑库下的所有表
13 SHOW TABLES;
14 # 描述表
15 DESC t_student;
16 # 展示建表语句
17 SHOW CREATE TABLE t_student;

数据类型-数字

类型 大小 说明
TINYINT 1字节 小整数
SMALLINT 2字节 普通整数
MEDIUMINT 3字节 普通整数
INT 4字节 较大整数
BIGINT 8字节 大整数
FLOAT 4字节 单精度浮点数
DOUBLE 8字节 双精度浮点数
DECIMAL ----  

不精确的浮点数

十进制的浮点数无法在二进制计算机精确表达.

比如0.2用二进制表示是1/8+1/16+1/128+...

计算精确数字用DECIMAL

数据类型-字符串

类型 大小 说明
CHAR 1-255字符 固定长度字符串
VARCHAR 1-65535字符 不固定长度字符串
TEXT 1-65535字符 不确定长度字符串
MEDIUMTEXT 1-1千6百万字符 不确定长度字符串
LONGTEXT 1-42亿字符 不确定长度字符串

数据类型-日期类型

类型 大小 说明 格式
DATE 3字节 日期 YYYY-MM-DD
TIME 3字节 时间 HH:MM:SS
YEAR 1字节 年份 YYYY
DATETIME 8字节 日期时间 YYYY-MM-DD HH:MM:SS
TIMESTAMP 4字节 时间戳 YYYYMMDD HHMMSS

修改表结构

添加字段

ALTER TABLE 表名称

ADD 列1 数据类型 [约束] [COMMENT 约束],

ADD 列2 数据类型 [约束] [COMMENT 约束],

....;

1 ALTER TABLE t_student
2 ADD age TINYINT NOT NULL COMMENT '年龄';

修改字段类型和约束

ALTER TABLE 表名称

MODIFY 列1 数据类型 [约束] [COMMENT 约束],

MODIFY 列2 数据类型 [约束] [COMMENT 约束],

....;

1 ALTER TABLE t_student
2 MODIFY age SMALLINT NOT NULL COMMENT '年龄';

修改字段名称

ALTER TABLE 表名称

CHANGE 列1 新列名1 数据类型 [约束] [COMMENT 注释],

CHANGE 列2 新列名2 数据类型 [约束] [COMMENT 注释],

.....;

1 ALTER TABLE t_student
2 CHANGE name stu_name VARCHAR(20) NOT NULL COMMENT '学生名字';

删除字段

ALTER TABLE 表名称

DROP 列1,

DROP 列2,

....;

1 ALTER TABLE t_student
2 DROP age;

修改表名

ALTER TABLE 表名称 RENAME 新表名;

1 ALTER TABLE t_student RENAME t_stu;

字段约束

数据库的范式

构造数据库必须遵循一定的规则,这种规则就是范式

目前关系数据库有6种范式,一般情况下,只满足第三范式即可

第一范式:原子性

1.第一范式是数据库的基本要求,不满足这一点就不是关系数据库

2.数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,不能存在重复的属性

不符合第一范式:

学号 姓名 班级
1000 小明 高三1班

符合第一范式:

学号 姓名 年级 班级
1000 小明 高三 1班

第二范式:唯一性

1.数据表中的每条记录必须是唯一的.为了实现区分,通常要为表加上一个列用来存储这个标识,这个唯一属性被称为主键列

无法区分的数据:

学号 成绩 日期
230 68 2020-09-17
230 68 2020-09-17

数据具有唯一性:

流水号 学号 成绩 日期
20200917001 230 68 2020-09-17
20200917002 230 68 2020-09-17

第三范式:关联性

1.每列都与主键有直接关系,不能存在传递依赖

2.依照第三范式,数据可以保存到不同的数据表,彼此保持联系

不符合第三范式:

爸爸 儿子 女儿 女儿的玩具 女儿的衣服
陈华 陈浩 陈婷婷 海绵宝宝 校服

符合第三范式:

爸爸 儿子 女儿
陈华 陈浩 陈婷婷

 

女儿 女儿的玩具 女儿的校服
陈婷婷 海绵宝宝 校服

四种字段约束

约束字段 关键字 描述
主键约束 PRIMARY KEY 字段唯一,且不能为NULL
非空约束 NOT NULL 字段值不能为空
唯一约束 UNIQUE 字段值唯一,且可以为空
外键约束 FOREIGN KEY 保证关联数据的逻辑性

主键约束

主键约束要求字段值在全表必须唯一,而且不能为NULL值

建议主键一定要使用数字类型,因为数字的检索速度非常快

如果主键是数字类型,还可以设置自动增长

1 CREATE TABLE t_student(
2     id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
3  ...
4 ) COMMENT = '学生表';

非空约束

非空约束要求字段的值不能为NULL值

NULL值以为没有值,而不是""字符串

1 CREATE TABLE t_student(
2     id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
3     name VARCHAR(20) NOT NULL COMMENT '名字',
4     sex CHAR(1) NOT NULL DEFAULT '' COMMENT'性别',
5     ...
6 ) COMMENT = '学生表';

唯一约束

唯一约束要求字段如果不为NULL,那么全表必须唯一

1 CREATE TABLE t_student(
2     ...
3     tel CHAR(11) NOT NULL UNIQUE COMMENT '号码',
4     ...
5 ) COMMENT = '学生表';

外键约束

外键约束用来保证关联数据的逻辑关系

外键约束定义在子表上

1 CREATE TABLE t_emp(
2     ...
3     deptno INT UNSIGNED,
4     FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
5 );

外键约束的的闭环问题:

如果 表之间形成外键闭环,我们将无法删除任何一张表

所以不建议使用外键约束

索引

一旦数据排序之后,查找的速度就会翻倍

MYSQL利用二叉树结构,对数据表的记录排序,从而加速数据的检索速度

如何创建索引

CREATE TABLE 表名称(

  ...,

  INDEX [索引名称] (字段)

);

1 CREATE TABLE t_student(
2     id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
3     name VARCHAR(20) NOT NULL COMMENT '名字',
4     sex CHAR(1) NOT NULL DEFAULT '' COMMENT'性别',
5     birthday DATE NOT NULL COMMENT '生日',
6     tel CHAR(11) NOT NULL UNIQUE COMMENT '号码',
7     remark VARCHAR(200) COMMENT '备注',
8     INDEX idx_name (name)
9 ) COMMENT = '学生表';

如何添加和创建索引

CREATE INDEX 索引名称 ON 表名(字段);

ALTER TABLE 表名称 ADD INDEX [索引名] (字段);

SHOW INDEX FROM 表名;

DROP INDEX 索引名称 ON 表名;

1 # 添加索引
2 ALTER TABLE t_student ADD INDEX idx_name(name);
3 CREATE INDEX idx_name ON t_student(name);
4 # 展示索引
5 SHOW INDEX FROM t_student;
6 # 删除索引
7 DROP INDEX idx_name ON t_student;

索引使用规则

数据量很大,而且经常被查询的数据表可以设置索引

索引只添加在经常被用作检索条件的字段上面

要在大字段上创建索引

posted @ 2020-09-15 17:41  mingmingn  阅读(202)  评论(0)    收藏  举报