1.数据库约束简介#
1.约束是在表上强制执行的数据检验规则,约束主要用于保证数据库的完整性。
2.当表中数据有相互依赖性时,可以保护相关的数据不被删除。
3.大部分数据库支持下面五类完整性约束:
- NOT NULL非空
- UNIQUE Key唯一值
- PRIMARY KEY主键
- FOREIGN KEY外键
- CHECK检查
4.约束作为数据库对象,存放在系统表中,也有自己的名字
5.创建约束的时机:
-在建表的同时创建
-建表后创建(修改表)
6.有单列约束和多列约束
2.列级约束和表级约束#
列级约束直接跟在列后面定义,不再需要指定列名,与列定义之间用空格分开
表级约束通常放在所有的列定义之后定义,要显式指定对哪些列建立列级约束,与列定义之间采用英语逗号,隔开
如果是对多列建联合约束,只能使用表级约束语法
1.非空约束(NOT NULL)
#
1 | NAME VARCHAR(18) NOT NULL |
列级约束:只能使用列级约束语法定义;确保字段值不允许为空;只能在字段级定义;
NULL值:所有数据类型的值都可以是NULL;空字符串不等于NULL;0也不等于NULL;
2.唯一约束(UNIQUE)#
1 | NAME VARCHAR(18) UNIQUE NOT NULL |
唯一性约束条件确保所在的字段或者字段组合不出现重复值;
唯一性约束条件的字段允许出现多个NULL;
同一张表内可建多个唯一约束;
唯一约束可由多列组合而成;
建唯一约束时MySQL会为止建立对应的索引;
如果不给唯一约束起名,该唯一约束默认与列名相同;
主键约束(PRIMARY KEY) 栗子:id INT PRIMARY KEY AUTO INCREMENT
主键从功能上看相当于非空且唯一
一个表中之允许一个主键
主键是表中唯一确定一行数据的字段
主键字段可以是单字段或者是多字段组合
当建立主键约束时,MySQL为主键创建对应的索引
主键约束名总为PRIMARY KEY
3.外键约束(FOREIGN KEY REFERENCE)#
dept_id INT REFERENCE tb_dept(id)
表内 CONSTRAINT FOREIGN KEY 外键名(建议是表名_约束名) (外键) REFERENCE 主表 (字段)
1 | CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id) |
3>表外 ALTER TABLE 表名 ADD [CONSTRAINT constraint] type (column);
1 | ALTER TABLE tb_emp ADD CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id) |
外键是构建一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系
子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)
当主表的记录被子表参照时,主表记录不允许被删除
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录
格式FOREIGN KEY(外键列名) REFERENCE 主表(参照列)
4.CHECK约束#
1 | age INT CHECK(age>18 AND age<60) 或者 sex VARCHAR(2) (sex='男' OR sex='女') check约束在MySQL中不起作用 |
既可作为列级约束,也可作为表级约束
定义在字段上的每一记录都要满足的条件
在CHECK中定义检查的条件表达式,数据需要符合设置的条件
条件表达式不允许使用
参照其他记录的值
3.增加约束#
i> 在建表之后,即表外 ALTER TABLE table ADD [CONSTRAINT constraint] type (column);
ii> 在建表的时候,即表内 CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id)
可增加或删除约束,但不能直接修改
可使约束启用和禁用
非空约束必须使用MODIFY子句增加
只要是可以使用列级约束语法来定义的约束,都可以通过modify来增加该约束
插入数据测试,这两句执行一次添加一行数据
INSERT INTO tb_emp(NAME,sex,age,addresss,email,dept_id)
VALUE(‘a’,’男’,’23’,’gz’,‘123@163.com‘,1);
4.删除约束#
约束可被删除,删除约束不会对数据产生影响
当删除被外键参照的主键时候,应该采用CASCADE关键字来级联删除外键,否则无法删除主键
语法如下:ALTER TABLE 表名 DROP CONSTRAINT 约束名
1 | #删除约束 |
11.自动增长和默认值
auto_increment只是MYSQL特有的,其他数据库里面没有,只能放在主键后面
sex VARCHAR(2) DEFAULT ‘男’,