MySQL中的约束

98 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

约束(Constraint)

在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。 常见的约束有哪些呢?

  • 非空约束(not null):约束的字段不能为 NULL。
  • 主键约束(primary key):约束的字段不能重复
  • 外键约束(foreign key):简称FK
  • 检查约束(check) :注意oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束

非空约束not null

create table t_user( id int , username varchar(255) not null, password varchar(255) );

唯一性约束(unique)

唯一约束修饰的字段具有唯一性,不能重复。但可以为NULL。

-- 案例: create table t_user( id int , username varchar(255) unique ); insert into t_user values(1,'zhangsan'); insert into t_user values(2,'zhagnsan');

-- 案例:给两个列或者多个列添加unique drop table if exists t_user; create table t_user( id int , username varchar(255), email varchar(255), unique(usercode,username) //多个字段联合起来添加一个约束 [表级约束] );

drop table if exists t_user; create table t_user( id int , username varchar(255) unique, //列级约束 email varchar(255) unique ); 注意:not null 约束只有列级约束,没有表级约束

主键约束

create table t_user( id int primary key, username varchar(255), email varchar(255) ) ;

根据以上的测试得出:id是主键,因为添加了主键约束,主键约束中的数据不能为NULL,也不能重复。

主键有什么作用
  • 表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键。
  • 主键的作用:主键值是记录在这张表当中的唯一标识。(就像一个人的身份证号码一样)
主键的分类

根据主键字段的字段数量来划分: 单一主键 (推荐的,常用的) 复合主键(多个字段联合起来添加一个主键约束)(复合主键不建议使用,因为复合主键违背三范式) 根据主键性质来划分: 自然主键:主键值最好就是一个和业务没有任何关系的自然数。(这种方式是推荐的) 业务主键:主键值和系统的业务挂钩,例如:拿着银行卡的卡号做主键,拿着身份证号码作为主键(不推荐用)**最好不要拿着和业务挂钩的字段作为主键。**因为以后的业务一但发生改变的时候,主键值可能也需要随着发生变化,但有的时候没有办法变化,因为变化可能会导致主键值重复。一张表的主键约束只能有一个

使用表级约束方式定义主键:

drop table if exists t_user; create table t_user( id int, username varchar(255), primary key(id) );

mysql 提供主键值 自增:

drop table if exists t_user; create table t_user ( id int primary key auto-increment, //id字段自动维护一个自增的数字,从1开始,以1递增。 username varchar(255) );

提示:oracle当中也提供了一个自增机制,叫做:序列(sequence)对象。

外键约束

现在一般不建议使用,每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。 阿里巴巴开发规范也不建议使用:

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

本文内容到此结束了,

如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。

如有错误❌疑问💬欢迎各位大佬指出。

主页共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃