文章目录
本节目标:
- 数据库约束
- 表的关系
🛫数据库约束
🌴约束类型
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- DEFAULT - 规定没有给列赋值时的默认值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句
🎋NOT NULL约束
创建表时,可以指定某列不为空
比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;
创建如下:
DROPTABLEIFEXISTS student;CREATETABLE student (
id INTNOTNULL,
sn INT,
name VARCHAR(20),
qq_mail VARCHAR(20));
查看表结构如下:
我们可以看到id行列是显示不可为null的
接下来我们插入数据试一下
结果也是意料之中,插入null数据时就直接报错了
🎍UNIQUE:唯一约束
指定sn列为唯一的、不重复的
这里我们重新设置一下表结构,对sn进行约束为唯一约束
DROPTABLEIFEXISTS student;CREATETABLE student (
id INTNOTNULL,
sn INTUNIQUE,
name VARCHAR(20),
qq_mail VARCHAR(20));
我们对表结构进行查询可以看到,sn列发生了明显变化
接下来我们依旧插入数据进行测试
发现如果sn相同就会进行报错
🌳DEFAULT:默认值约束
指定插入数据时,若列为空,则为默认值
我们重新设置一下student表,对name进行默认值约束,若为null,则为默认值:遇事问春风乄
设置如下:
-- 重新设置学生表结构
DROPTABLEIFEXISTS student;CREATETABLE student (
id INTNOTNULL,
sn INTUNIQUE,
name VARCHAR(20)DEFAULT'遇事问春风乄',
qq_mail VARCHAR(20));
我们查看表结构后发现
Default列的name行不再为null,而为我们设置的默认值
我们来进行测试一下,插入一个name为null的数据
我们看到查询后name为默认值
注意事项:只适用于指定列插入数据,且该列不是受约束的列
🎄PRIMARY KEY:主键约束
指定列为主键
主键 是关系表中记录的唯一标识
使用主键应注意以下几点:
- 每个表只能定义一个主键。
- 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。
- 一个字段名只能在联合主键字段表中出现一次。
- 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。
这里我创建以下student表
-- 重新设置学生表结构
DROPTABLEIFEXISTS student;CREATETABLE student (
id INTPRIMARYKEY,
sn INTUNIQUE,
name VARCHAR(20)DEFAULT'遇事问春风乄',
qq_mail VARCHAR(20));
表结构如下:
我们发现上述表格可以理解为:主键是 NOT NULL 和 UNIQUE 的结合
对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1
使用如下:
-- 主键是 NOTNULL 和 UNIQUE 的结合,可以不用 NOTNULL
id INTPRIMARYKEY auto_increment
注意事项:是当前表里使用的最大值+1
🍀FOREIGN KEY:外键约束
外键用于关联其他表的主键或唯一键
语法如下:
foreign key (字段名) references 主表(列)
MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
定义外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
接下来我们设计一个案例如下:
- 创建班级表classes,id为主键
DROPTABLEIFEXISTS classes;CREATETABLE classes (
id INTPRIMARYKEY auto_increment,
name VARCHAR(20),
desc1 VARCHAR(100));
- 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id
表结构如下:
使用注意事项放在上面了,这里博主偷个懒,就不演示了;
🌲CHECK约束
CHECK约束添加规则
- CHECK 约束用于限制列中的值的范围。
- Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。
- 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
- 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
使用如下:
drop table if exists test_user;
create table test_user (
id int,
name varchar(20),
sex varchar(1),
check (sex ='男' or sex='女'));
表结构如下:
表结构没有什么变化,我们再来看看添加数据吧
添加数据如下:
查询如下:
当我们输入其他值时
就会爆出错误!
🛬表的设计
大概可以分为以下三种
🚩一对一
🚩一对多
🚩多对多
⭕总结
关于《【MySQL】 MySQL的增删改查(进阶)–壹》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!
版权归原作者 遇事问春风乄 所有, 如有侵权,请联系我们删除。