约束是一种限制,它是对表中行和列的数据做出约束,确保表中数据的完整性和唯一性。

mysql中常见的约束主要分为以下6种,分别为:

1、主键(primary key):用于保证该字段值具有唯一性且非空,如员工编号;

2、唯一(unique):用于保证该字段的值具有唯一性但可以为空;

3、非空(not null):用于保证该字段的值不能为空;

4、默认(default):用于保证该字段有默认值,如性别;

5、外键(foreign key):用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。通过在从表中添加外键约束,用于引用主表中某列的值;

6、检查约束(check)--mysql中不支持

其他约束:

auto_increment:自增长约束

unsigned:无符号约束

zerofill:零填充约束--如果指定了int的位数(如6位),而此时的整型数据为11,通过添加zerofill约束,此时表中的数据为000011,即通过0来填充确保

一、什么时候添加约束?

一般在创建表或者修改表时添加约束。

【修改表时添加约束】

1、添加列级约束

alter table 表名 modify column 字段名 字段类型 新约束

2、添加表级约束

alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用]

二、如何添加约束?

1、约束的添加主要分为以下两种方式,分别为:

(1)列级约束:6大约束在语法上都支持使用列级约束,但是通过列级约束创建的外键约束没有效果

(2)表级约束:除非空(not null)和默认(default)外,其他4种约束均支持通过表级约束来创建

2、语法结构:

表级约束:[constraint 约束名] 约束类型(字段名) 

     [constraint 约束名] 约束类型(从表字段名) references 主表(主表的关联列字段)  -- 外键约束

1 create table 表名(
2     字段名1 字段类型 列级约束,
3     字段名2 字段类型 列级约束,
4     ......
5     字段名m 字段类型,
6     表级约束            
7 )

【说明】

外键约束的约束名命名规范:fk_从表名_主表名

【实例】

mysql约束条件有哪些 mysql的约束_字段

三、常见面试题

1、主键约束和唯一约束的比较

 

是否保证唯一性

是否允许为空

同一个表中是否支持多个

是否允许组合

主键(primary key)




是,但不建议使用

唯一(unique)


是,但是只能有一个null


是,但不建议使用

【关于是否允许组合的说明】

在使用表级约束为表中的数据添加约束条件时,可以将表中的字段名组合使用,如约束类型(字段名1,字段名2)

如:primary key(id,name),此时表中两条记录中只要id和name字段的值不同时相同,就能满足primary key的约束条件。如(1,'mary')和(1,'john')

2、外键约束的注意事项

(1)要求在从表中设置外键关系

(2)从表中外键列的类型和主表中关联列的类型要求一致或者类型兼容,对于字段名称无相关要求

(3)主表的关联列必须是一个key,一般是primary key或者unique

(4)在插入数据是,先插入主表,再插入从表;删除数据时,先删除从表,再删除主表(***)