MYSQL————数据库的约束

1.约束类型

1.not null:指示某列不能存储null值

2.unique:保证某列的每行必须有唯一值

3.default:规定没有给列赋值时的默认值

4.primary key:not null和unique的结合。确保某列(或两个或多个列的结合)有唯一标识,有助于更容易更快捷的找到表中的一个特定记录。

5.foreign key:保证一个表中的数据匹配另一个表中的值的参照完整性。

6.check:保证列中的值符合指定的条件。对于MYSQL数据库,对check子句进行分析,但是忽略check子句

1.1 not null约束

not null:指示某列不能存储null值

创建表时,指定字段添加约束 

NO表示不能写入null

YES表示可以写入null


 1.当字段指定约束not null时,写入数据时,未写该字段,会报错,报Field '字段' doesn't have a default value,该字段没有默认值,你必须写上一个值

2.not null约束的字段,在写入数据时,不能对该字段写入null,数据库帮我们做了一次校验

3.只有当非空列有值时可以写入

1.2 unique (唯一约束)

指定某列为唯一的,不重复的:

 create table test(
    -> id int unique,
    -> name varchar(20)
    -> );

约束id字段为唯一的,不重复的


当test表中有了一条id为1,name为张三的数据,再插入一条id为1,name为李四的数据时,会报id重复的警告


当指定字段被unique约束时,插入的数据可以为null,当再次插入null的数据时,不会报错null可以重复插入

1.3default (默认约束)

规定没有给列赋值时的默认值

指定插入数据时,name为空,默认为无名氏

create table test(
    -> id int,
    -> name varchar(10) default'无名氏'
    -> );

当为某列设置了默认约束的时候,如果不给这个列指定值才会使用默认约束

虽然指定了默认约束,但是当我们手动指定这一列的值为null时,插入的值依然为null,因为这个null是我们手动指定的,可以理解为我们想要的值

用户指定的优先级要高于默认约束

1.4primary key(主键约束)

指定id列为主键

 create table test(
    -> id int primary key,
    -> name varchar(20)
    -> );

primary key是not null与unique的结合,确保某列(或两列或多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定记录

主键约束的列即使非空的,也是唯一的

列被标识为PRI,表示他是一个主键

1.写入数据时,两个约束同时生效

2.主键约束帮我们校验了非空和唯一,这两个校验在写入数据时对效率有一定影响,比起不做校验,这个性能消耗是可以承担的

3.建议为每一张表定义一个主键


auto_increment

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。

 create table test(
    -> id int primary key auto_increment,
    -> name varchar(20)
    -> );

 让数据库帮我们去维护主键的增长,不用程序员自己去计算了,在插入的时候先找到最大的值,然后在这个基础上加1,生成一个新的值,作为新一个数据行主键id列的值


 全列插入

设置了自增主键之后,发现写入null时,也可以成功的插入数据

这里并不是说把null写入数据库了,而是说让数据库帮我们处理这个列的值(自增操作) 


指定列插入

 当删除前两条数据后,再插入数据,id列会在删除的最后一条数据上加一作为新的数据的id值,以上现象是有delete造成的

delete:delete即使删除全部数据,他并不会改变表的结构,可以回滚,所以你主键记录到的值是从之前的开始往下记录的

主键值可以自己添加,只要和之前的不同就行,所以主键值在数据1表有可能是不连续的

当再次添加数据时

 对于我们插入的数据,数据库会自动帮我们进行排序(在自增操作下)


一个表中不允许有两个主键

但是一个主键可以包含多个列(复合主键) 

在唯一校验时,只有复合主键中所有的列都相同才会被判定为相同 

主键的值时定义主键时,多个列值的组合

 1.5 foreign key 

保证一个表中的数据匹配另一个表中的值的参照完整性

 表中某个列的值,必须是另一张表中的主键列,或是唯一约束列的值,也就是当前表中的值必须在另一张表中存在,且满足主键或唯一约束


创建班级表和学生表

CREATE TABLE class(
id int PRIMARY KEY auto_increment,
name varchar(20)
);

CREATE TABLE student(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) not NULL,
class_id int 
);

当前表没有设置主外键关系


外键用于关联其他表的主键或唯一键

语法:

foreign key (字段名)references 主表(列)
 create table student(
    -> id int primary key auto_increment,
    -> name varchar(20) not null,
    -> class_id int,
    -> foreign key(class_id)references class(id)
    -> );

1.foreign key:创建外键的关键字

2.class_id:表示当前表中class_id这个字段要与主表建立主外键关系

3.references:关键字,表示后面要引用哪个表中的哪个列

4.class(id):指定主表和相应的列


 通过外键约束,保证数据的完整性和关系的正确性


删除主表的数据

1.删除主表数据,会报一个主外键关系的错误

2.如果要删除主表中的记录,子表中不能有对该条记录的依赖,也就意味着要先删除子表中的记录,再去删除主表中的记录

 

1.5 check

保证列中的值符合指定的条件。对于MYSQL数据库,对check子句进行分析,但是忽略check子句

 1.check关键字是用来检查这个值是否符合check后面的条件的

2.但是mysql8.0.16之前的版本不支持这个约束,所以写了也没什么效果

3.只有从8.0.16开始,check约束才被正式支持可以使用生效

  • 30
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值