约束
概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
分类:
- 主键约束:PRIMARY KEY
含义:非空且唯一
一张表只能有一个字段为主键,主键就是表中记录的唯一标识
-- 在创建表时,添加主题约束
CREATE TABLE stu(
id INT PRIMARY KEY,
age int
);
-- 删除主键
ALTER TABLE stu DROP PRIMARY KEY
-- 创建表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY
-- 自动增长:
1.概念:如果某一列是数值类型的,使用AUTO_INCREMENT可以完成值的自动增长
2.在创建表时,添加主键约束,并且完成主键自增长
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10)
);
3.删除自动增长
ALTER TABLE stu MODIFY id INT ;
4.添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
- 非空约束:NOT NULL
-- 创建表时添加约束:
CREATE TABLE stu(
id int,
name varchar(10) NOT NULL
);
-- 创建表后,添加非空约束:
ALTER TABLE stu modify name varchar(10) NOT NULL;
-- 删除非空约束:
ALTER TABLE stu MODIFY name varchar(10);
- 唯一约束:UNIQUE
-- 创建表时,添加唯一约束
CREATE TABLE STU(
id INT,
phone_number VARCHAR(10) UNIQUE -- 添加唯一约束
)
注意MySQL中,唯一约束限定的列的值可以有多个null
-- 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
-- 在创建表后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(10) UNIQUE;
- 外键约束:FOREIGN KEY,让表与表产生关系,从而保证数据的正确性
-- 在创建表时,可以添加外键
语法:
CREATE TABLE 表名(
...
外键列名 类型,
CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列称)
);
-- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表名称(主键列名称)
-- 级联操作
-- 添加级联操作:
语法: ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE
-- 分类:
1.级联更新:ON UPDATE CASCADE
2.级联删除:ON DELETE CASCADE
注意主键约束、唯一约束、外键约束的删除方式
多表之间的关系:
1.分类
1.一对一:
如:人和身份证
分析:一个人只有一个身份证,一个身份证只能对应一个人
2.一对多||多对一:
如:部门和员工
分析:一个部门可以有多个员工,一个员工只能所属一个部门
3.多对多:
如:学生和课程
分析:一个学生可以选择多门课程,一门课程可以被很多学生选择
2.实现关系:
1.一对多:
在多的一方创建外键,指向一的主键
2.多对多:
多对多关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键
分别指向两张表的主键,--联合主键
3.一对一:
一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
一般直接放予一张表中
多表查询:
分类:
- 内连接查询:
1.隐式内连接:使用WHERE条件消除无用数据
SELECT
列名列表
FROM
表名列表
WHERE.....
2.显式内连接:SELECT 字段列表 FROM 表名1 [INNER] JOIN 表名2 ON 条件
INNER可省略
SELECT
列名列表
FROM
表名1
INNER JOIN 表名2 ON 条件
内连接查询注意事项:
1.从哪些表中查询数据
2.条件是什么
3.查询哪些字段
- 外链接查询:
1.左外连接:
语法:
SELECT
字段列表
FROM 表1
LEFT [OUTER] JOIN 表2 ON 条件;
OUTER可省略
查询的是左表所有数据以及其交集部分
2.右外连接:
语法:
SELECT
字段列表
FROM 表1
RIGHT [OUTER] JOIN 表2 ON 条件;
查询的是右表所有数据以及其交集部分
一般使用左表较多,左外与右外可以随意切换,只需要将表1和表2位置互换即可
- 子查询:
子查询不同情况
1.子查询的结果是单行单列的
子查询可以作为条件,使用运算符去判断。 运算符 > < >= <= =
2.子查询的结果是多行单列的
子查询可以作为条件,使用运算符IN来判断
3.子查询的结果是多行多列的
子查询可以作为一张虚拟表参与查询