目录
MySQL中,主要包括6种约束类型:
(1)主键约束
主键是表中能唯一识别表中每条信息的字段。要求:唯一、非空。一个表中只能有1个主键。
(2)外键约束
与主键结合使用,确保数据的一致性。
(3)唯一约束
一个表中可以有多个字段设置唯一约束,允许存在空值。
(4)检查约束
用来检查数据表中,字段值是否有效,减少无效数据的输入。
(5)非空约束
设置了非空约束的字段,不允许出现空值。
(6)默认值约束
设置了默认值约束的字段,在该字段无数据输入时,会自动添加一个默认值。通常和非空约束一起使用。
1、主键约束 PRIMARY KEY
不论是单字段主键还是多字段联合主键都需要满足:
1)主键能唯一标识表中每一行数据,且一个表中只能有1个主键的唯一性;
2)主键不能有NULL值;
3)联合主键中字段名不能重复出现。
设置主键的语法格式:
1)CREATE TABLE 语句中,
#单字段主键:
#在定义字段时,创建约束
CERATE TABLE <表名> (<字段名> <数据类型> PRIMARY KEY [默认值],...)
或
#定义完所有字段后,在最后创建约束
CERATE TABLE <表名> (<字段名> <数据类型> ,...,[CONSTRAINT <约束名>] PRIMARY KEY [字段名])
#多字段联合主键:
CERATE TABLE <表名> (<字段名> <数据类型> ,...,PRIMARY KEY [字段1,字段2,…,字段n])
2)ALTER TABLE 语句中,
#修改约束:
ALTER TABLE <表名> ADD PRIMARY KEY(<字段名>);
#删除约束:
ALTER TABLE <表名> DROP PRIMARY KEY;
2、外键约束 FOREIGN KEY
外键是与主键一起使用的,用来约束两个表的数据一致性和完整性。主键所在表为主表,外键所在表为从表。
外键需遵守的规则:
1)一个表可以有多个外键,允许有空值;
2)主表已存在于数据库中,或为正创建的表。主表必须已指定主键;
3)外键中字段数目、对应的字段数据类型必须与主键中字段数目、对应的字段数据类型相同。
设置外键的语法格式:
1)CREATE TABLE 语句中,
CERATE TABLE <表名> (<字段名> <数据类型> ,...,[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…])
2)ALTER TABLE 语句中,
#修改外键约束:
ALTER TABLE <表名> ADD CONSTRAINT <外键名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
#删除外键约束:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
3、唯一约束 UNIQUE
设置唯一约束的语法格式:
1)CREATE TABLE 语句中,
CERATE TABLE <表名> (<字段名> <数据类型> UNIQUE,...);
2)ALTER TABLE 语句中,
#修改唯一约束:
ALTER TABLE <表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
#删除唯一约束:
ALTER TABLE <表名> DROP INDEX <唯一约束名>;
4、检查约束 CHECK
设置检查约束的语法格式:
1)CREATE TABLE 语句中,
CERATE TABLE <表名> (<字段名> <数据类型> ,...,CHECK <检查约束>);
<检查约束>,可以是简单的表达式,也可以是子查询
2)ALTER TABLE 语句中,
#修改检查约束:
ALTER TABLE <表名> ADD CONSTRAINT <检查约束名> CHECK(<检查约束>);
#删除检查约束:
ALTER TABLE <表名> DROP CONSTRAINT <检查约束名>;
5、默认值约束 DEFAULT
设置默认值的语法格式:
1)CREATE TABLE 语句中,
CERATE TABLE <表名> (<字段名> <数据类型> DEFAULT <默认值>,...);
2)ALTER TABLE 语句中,
#修改默认值:
ALTER TABLE <表名>
CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;
#删除默认值:
ALTER TABLE <表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;
6、非空约束 NOT NULL
设置非空约束的语法格式:
1)CREATE TABLE 语句中,
CERATE TABLE <表名> (<字段名> <数据类型> NOT NULL,...);
2)ALTER TABLE 语句中,
#修改非空约束:
ALTER TABLE <表名> CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;
#删除非空约束:
ALTER TABLE <表名> CHANGE COLUMN <字段名>
<字段名> <数据类型> NULL;