字段约束常存在于关系型数据库。例如:MYSQL、Oracle、SQL Server等。对于关系型与非关系型数据库的区别,这里不讨论。
以MYSQL为例子,常见字段约束主要有四类:
1、主键约束:primary key
1)格式:在数据类型后,添加primary key。
如果为一个列字段,添加了主键约束,那么该列就称之为主键。通常情况下,每张表都会存在一个主键字段。
create table stu(
id int primary key,
…
);
2)特点:
唯一、非空。
主键字段在一张表中,有且只有一个,不允许为空(即新建数据时,该字段必须有值),否则报错。
3)主键自增策略:
主键还可以设置其策略为自增(新建数据时会自动+1),但是仅适用于数值类型的主键。
create table user1(
id int primary key auto_increment,
name varchar(20),
password varchar(30),
sex char(1)
);
这里额外提醒:在生产项目中,通常不建议使用数值型主键,因为在对表数据操作的时候,容易产生一些非常难以解决的问题,例如,新增之后删除,自增策略会从数值几开始?而后生成值时,会不会由于某个操作导致你的值冲突?这些是需要在设计表字段时,需要考虑清楚的。
2、非空约束:not null
1)格式:数据类型后添加关键字 not null
非空约束:如果一个列添加了非空约束,那么这个列的值就不能为空,但可以重复。
例如,列中的密码值通常不为空:
create table stu(
password varchar(50) not null,
…
);
2)特点:不允许为空。
假如对非空字段插入值为空,通常会引发报错。例如提示:xxx can not be null之类。
3、唯一约束:unique
1)格式:数据类型后添加关键字unique。
如果一个列添加了唯一约束,那么这个列的值就必须是唯一约束的(即不能重复),但可以为空(null值也只允许有一个)。
添加唯一约束:例如为username添加唯一约束以及非空约束:
create table user(
username varchar(50) unique not null,
…
);
2)特点:整列数据中,不允许重复。
4、外键约束:foreign key(keyname) reference table(row列)
1)概念:
如果一个字段x在一张表中(表一)是主关键字,而在另一张表中(表二)不是主关键字,则字段x称为表二的外键。
也可以理解为,在关系模式a1中,b属性集不是自己的主键,但是在关系模式a2中,b属性集是主键,那么该属性集b,称之为a1的外键。
外键,代表的是一种映射关系,作用于表之间。
例如,目前存在一个部门表,一个员工表,那么一个部门可以拥有多个员工,而一个员工只能拥有一个部门,假如我们需要使用对应关系进行连接2个表,那么可以在其中一个表中,设立一个外键列,而这个外键列,是对应的另一个表的主键。
问题一:这个外键列设置在哪个表更合适?
所谓的外键,通常都是另一个表的主键,而主键约束中,展示过主键的一个特点:不能为空,唯一不能重复。所以通常主键会设置在类似id、num之类的数值之中,也方便使用主键自增策略。所以,外键设置的位置,最好是不会同时出现多个值,避免在寻找对应映射关系的时候,出现值过多导致的麻烦,从上面表的阐释中,我们可以知道,1个部门可以对应多个员工,但是一个员工只能对应一个部门,所以我们把外键设置在员工表中更为合适。

如上表,在mysql中,2个表,就可以通过设置外键的形式,把关系连接起来,而取得外键之后,就代表着可以找到对应主键表中的所有信息。
2)外键的关系维护:
当设置了外键之后,mysql就会对2个表的关系模式进行维护,当需要对其中一张表做删改操作的时候,如果发现该主键表存在外键数据,那么就会提示报错。
例如:上面的2个表,如果我需要删除部门表中的“办公室”记录,那么由于在员工表中拥有对应外键“刘备”,所以如果要删除的话,会导致报错,一定程度上避免了数据的误操作。
3)外键设置的语法:foreign key(外键列名) references 外键表(列)
create table 表名(
id int,
name varchar(50),
…
foreign key(dept_id) references dept(id) #设置一个dept_id列作为外键,参考表dept中的列id
);
4)特点:
表关系维护;外键约束简单理解,实际就是两表之间的关系维护依据,可以通过外键字段,对另一张表进行索引操作,并且如果存在外键关联关系的数据,则双方不可以进行直接的修改删除操作。
5)个人建议:
对于外键字段,在实际企业开发中,使用的应该也是不多,因为目前的主流思想是减少强关联,都在往独立、模块化方向走,例如微服务思想、分布式、容器云,在代码中常用的spring、mybatis等,本身就是处于减少代码冗余,减少复杂关联而实现。
所以,如非必要,外键约束,尽可能少加。当你进行表关联查询时,发现获取数据为空,即可知道另一张表已经不存在数据,可以通过代码完善独立维护即可。
本文详细解释了MySQL中四种常见的字段约束,包括主键约束(唯一且非空)、非空约束、唯一约束和外键约束,以及它们在数据库设计中的应用和注意事项。
1009

被折叠的 条评论
为什么被折叠?



