mysql(约束)

124 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第9篇文章

约束

  1. 概念: 约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  2. 目的: 保证数据库中数据的正确,有效性和完整性。
  3. 分类:
not null(非空约束) => -- 限制该字段的数据不能为空
unique(唯一约束) => -- 保证该字段的数据都是唯一,不重复的
primary key(主键约束) => -- 主键是一行数据的唯一标识,要求非空且唯一
default(默认约束) => -- 保存数据时,如果未指定该字段的值,则采用默认值
check(检查约束8.0.16版本之后) => -- 保证字段值满足某一个条件
-- 例:age int check(age > 0 && age < 130)
foreign key(外键约束) => -- 用来让两张表的数据之间建立连接,保证数据的一致性和完整性
(auto_increment => -- 自动增长)

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

外键约束(MyISAM引擎不支持外键,InnoDB引擎支持)

概念: 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

image-20220906164206099.png

-- 例:添加外键
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 父表名(父字段名);
-- 例:删除外键
alter table 表名 drop foreign key 外键名称;

image-20220906191900925.png

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];

多表查询

多表关系

image-20220907192805988.png

-- 消除笛卡尔积
select * from users, department where users.dep_id = department.id;

连接查询

内连接:

查询两张表交集的部分

  1. 隐式内连接
select 字段列表 from1, 表2 where 条件...;
  1. 显式内连接
select 字段列表 from1 [inner] join2 on 连接条件...;

外连接

  1. 左外连接
select 字段列表 from1 left [outer] join2 on 条件 ...;
  • 相当于查询表1(A)的所有数据包含表1和表2交集部分的数据
  1. 右外连接
select 字段列表 from1 right [outer] join2 on 条件 ...;
  • 相当于查询表2(B)的所有数据包含表1和表2交集部分的数据

image-20220917204822432.png