学习目标
1.管理逻辑库和数据表(创建、删除、修改逻辑库和数据表)
2.了解常用的数据类型和约束(字符串、整数、浮点数、精确数字、日期、枚举。主键约束、非空约束、唯一约束、外键约束等)
3.掌握索引运行机制和使用原则(排序为什么可以提高数据检索速度?怎么创建和删除索引?什么条件下使用索引?)
数据定义语言:定义逻辑库、数据表
什么是SQL语言?
SQL是用于访问和处理数据的标准计算机语言
SQL语言分类
DML(数据操作语言):对数据表的增删改查
DCL(数据控制语言):创建用户、分配权限、事务管理
DDL(数据定义语言):管理逻辑库、数据表、视图、索引
SQL语句注意事项
1.SQL语句不区分大小写
2.SQL语句必须以封号结尾;
创建逻辑库
1.CREATE DATABASE 逻辑库名称;
2.SHOW DATABASES;
3.DROP DATABASE 逻辑库名称;
创建数据表
CREATE TABLE 数据表 (
列名1 数据类型 [约束] [COMMENT 注释],
列名2 数据类型 [约束] [COMMENT 注释],
…
)[COMMENT = 注释];
CREATE TABLE student(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR(1) NOT NULL,
birthday DATE NOT NULL,
tel CHAR(11) NOT NULL,
remark VARCHAR(200)
);
INSERT INTO student VALUES(1,"李强","男","1995-05-15","13312345678",NULL);
数据表的其他操作
查看当前逻辑空间里面有什么数据表:SHOW tables;
看数据表的具体情况:DESC student;
查看表的建表语句:SHOW CREATE TABLE student;
删除数据表:DROP TABLE student;
数据定义语言:数据类型
浮点数会丢失精度
十进制的浮点数无法在计算机中用二进制精确表达,保存数据时不建议使用浮点类型,而要使用decimal类型
数据定义语言:修改表结构
添加字段
ALTER TABLE 表名称
ADD 列1 数据类型 [约束] [COMMENT 注释],
ADD 列1 数据类型 [约束] [COMMENT 注释],
…;
ALTER TABLE student
ADD address VARCHAR(200) NOT NULL,
ADD home_tel CHAR(11) NOT NULL;
对已有字段的修改:修改字段类型和约束
ALTER TABLE 表名
MODIFY 列1 数据类型 [约束] [COMMENT 注释],
MODIFY 列2 数据类型 [约束] [COMMENT 注释],
…;
ALTER TABLE student
MODIFY home_tel VARCHAR(20) NOT NULL;
修改字段名称
ALTER TABLE 表名称
CHANGE 列1 新列名1 数据类型 [约束] [COMMENT 注释],
CHANGE 列2 新列名2 数据类型 [约束] [COMMENT 注释],
…;
ALTER TABLE student
CHANGE address home_address VARCHAR(200) NOT NULL;
删除字段
ALTER TABLE 表名
DROP 列1,
DROP 列2,
…;
ALTER TABLE student
DROP home_address;
数据定义语言:字段约束
数据库的范式
1.构造数据库必须遵循一定的规则,这种规则就是范式
2.目前关系数据库有六种范式,一般情况下,只满足第三范式即可
第一范式:原子性
1.第一范式是数据库的基本要求,不满足这一点就不是关系型数据库
2.数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性
第二范式:唯一性
1.数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列被称为主键列。
第三范式:关联性
1.每列都与主键有直接关系,不存在传递依赖
2.依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联
字段约束
1.MySQL中的字段约束共有四种:
主键约束
1.主键约束要求字段的值在全表必须唯一,而且不能为NULL值
2.建议主键一定要使用数字类型,因为数字的检索速度会非常快
3.如果主键是数字类型,还可以设置自动增长
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
...
);
非空约束
1.非空约束要求字段的值不能为NULL值
2.NULL值是没有值,而不是“”空字符串
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
married BOOLEAN NOT NULL DEFAULT FALSE
);
唯一约束
1.唯一约束要求字段值如果不为NULL,那么在全表必须唯一
CREATE TABLE t_teacher(
…
tel CHAR(11) NOT NULL UNIQUE
);
CREATE TABLE t_teacher(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
tel CHAR(11) NOT NULL UNIQUE,
married BOOLEAN NOT NULL DEFAULT FALSE
);
外键约束
1.外键约束用来保证关联数据的逻辑关系
2.外键约束的定义是写在子表上的
CREATE TABLE t_dept(
deptno INT UNSIGNED PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE,
tel CHAR(4) UNIQUE
);
CREATE TABLE t_emp(
empno INT UNSIGNED PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
sex ENUM("男","女") NOT NULL,
deptno INT UNSIGNED,
hiredate DATE NOT NULL,
FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);
外键约束的闭环问题
1.如果形成闭环,我们将无法删除任何一张表的记录
数据定义语言:索引
数据排序的好处
1.一旦数据排序后,查找的速度就会翻倍
如何创建索引
建表时:
CREATE TABLE 表名(
...,
INDEX [索引名] (字段),
...
);
CREATE TABLE t_message(
id INT UNSIGNED PRIMARY KEY,
content VARCHAR(200) NOT NULL,
type ENUM("公告","通报","个人通知") NOT NULL,
create_time TIMESTAMP NOT NULL,
INDEX idx_type (type)
);
给已存在的数据表的某个字段添加索引
CREATE INDEX 索引名称 ON 表名(字段);
ALTER TABLE 表名 ADD INDEX [索引名] (字段);
SHOW INDEX FROM 表名;
DROP INDEX 索引名 ON 表名;
索引的使用原则
1.数据量很大,而且经常被查询的数据表可以设置索引
2.索引只添加在经常被用作检索条件的字段上面
3.不要在大字段上添加索引