我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第9篇文章
约束
- 概念: 约束是作用于表中字段上的规则,用于限制存储在表中的数据。
- 目的: 保证数据库中数据的正确,有效性和完整性。
- 分类:
not null(非空约束) => -- 限制该字段的数据不能为空
unique(唯一约束) => -- 保证该字段的数据都是唯一,不重复的
primary key(主键约束) => -- 主键是一行数据的唯一标识,要求非空且唯一
default(默认约束) => -- 保存数据时,如果未指定该字段的值,则采用默认值
check(检查约束8.0.16版本之后) => -- 保证字段值满足某一个条件
-- 例:age int check(age > 0 && age < 130)
foreign key(外键约束) => -- 用来让两张表的数据之间建立连接,保证数据的一致性和完整性
(auto_increment => -- 自动增长)
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
外键约束(MyISAM引擎不支持外键,InnoDB引擎支持)
概念: 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
-- 例:添加外键
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 父表名(父字段名);
-- 例:删除外键
alter table 表名 drop foreign key 外键名称;
no action restrict(限制) cascade(级联)
set null set defalut
-- 例:可以进行删除/更新行为
alter table 表名 add constraint 外键名称 foreign key(外键字段) references 父表名(父表名字段)
on update cascade on delete cascade[on update set null on delete set null];
多表查询
多表关系
-- 消除笛卡尔积
select * from users, department where users.dep_id = department.id;
连接查询
内连接:
查询两张表交集的部分
- 隐式内连接
select 字段列表 from 表1, 表2 where 条件...;
- 显式内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件...;
外连接
- 左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件 ...;
- 相当于查询表1(A)的所有数据包含表1和表2交集部分的数据
- 右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件 ...;
- 相当于查询表2(B)的所有数据包含表1和表2交集部分的数据