9人参与 • 2026-03-17 • Mysql
在使用数据库的时候,为了避免插入数据出错,一般会对插入的数据进行约束(限制)。
比如插入学生信息(包含学生名字):


如果不对插入的数据进行约束,那么这种情况,也会插入成功:

在逻辑上这显然是不成立的,因为学生的名字不能是null。
为此,mysql中提供了约束类型,用来实现对插入数据的管控。
一共有这几种:
接下来,妖妖介绍:
语法形式:
create table 表名(id int ,name varchar(20) not null,score int);
举例,创建一个表,名字这一列不能填null:

此时还想插入一个名字为null的学生就不可能了:

注意事项:
1、name的默认值不能是null了:

2、不能将名字修改成null:

语法形式:
create table 表名(id int unique,name varchar(20),score int);
举例,创建一个表,id不能重复:

注意:
unique允许有多个null值,而不报错。
语法形式:
create table 表名(id int ,name varchar(20) default '自定义的默认值',score int);
举例,创建一个表,id的默认值是-1,名字的默认值是‘无姓名’:

primary key(一般叫主键)和unique很像,被约束的列,都不能出现重复的值,但他们也有很多不同点。
1.唯一性:primary key和unique都确保了被修饰的列的值是唯一的。
2.索引:mysql 会自动为 primary key 和 unique 创建索引,以加快查询速度。(索引如果没学过,不用管,不要紧)
1.unique允许插入相同的null值,因为mysql认为null无法比较,因此不相等。
但primary key不允许插入相同的null值。



2.数量 primary key在一个表中,只能约束一列数据:

但unique在一个表中可以约束多列数据:

像这种约束,用的还是比较多的,比如说游戏的id
五月份 l o l 的改名活动,不知道大家有没有白.嫖:
像这种可以取重复id的账户系统,底层使用的就是primary key这类约束,既对id这一列进行唯一约束,但是不对name这一列进行唯一约束。
auto_increment是一个关键字,通常与primary key一起使用去约束整数类型的数据,
是mysql 中用于自动生成唯一标识符的属性。
语法:

插入数据:

结果:

也就是说,id默认从1,开始,然后顺序增加。
注意:
如果图中插入了一个id为100的数据:

在使用auto_increment:

那么id将会从101开始递增:

create table 表名(id int ,foreign key(id) references 另一个表的表名(表中一个字段) )
看不懂没关系,等一下有栗子吃。
外键相对于前四个,功能就有意思了,语法形式也和上面有所不同。
有这样两个表,一个存储班级:

一共只有三个班级,请记住。
接下来一个表,用来存储学生:

此时,父表(class)和子表(student)就建立了联系。
子表,在插入数据的时候,受到父表的约束,班级号码不能1、2、3以外的数字,否则报错:

同时,父表也可能会被子表约束:
子表先插入一个非法数据:

然后删除父表对应的行数据,将会报错:

语法:

实际上也是对插入数据进行约束。
例如,上图插入数据的price必须是正数才行,不然会报错。
但是,mysql并不支持check关键字的使用,即使它可以用代码执行,但是实际运行时,会自动忽略。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论