tonglin0325的个人主页

MySQL学习笔记——约束

1.数据库约束简介#

1.约束是在表上强制执行的数据检验规则,约束主要用于保证数据库的完整性。

2.当表中数据有相互依赖性时,可以保护相关的数据不被删除。

3.大部分数据库支持下面五类完整性约束:

  - NOT NULL非空

  - UNIQUE Key唯一值

  - PRIMARY KEY主键

  - FOREIGN KEY外键

  - CHECK检查

4.约束作为数据库对象,存放在系统表中,也有自己的名字

5.创建约束的时机:

  -在建表的同时创建

  -建表后创建(修改表)

6.有单列约束和多列约束

2.列级约束和表级约束#

列级约束直接跟在列后面定义,不再需要指定列名,与列定义之间用空格分开

表级约束通常放在所有的列定义之后定义,要显式指定对哪些列建立列级约束,与列定义之间采用英语逗号,隔开

如果是对多列建联合约束,只能使用表级约束语法

1.非空约束(NOT NULL)
#

 

1
2
NAME VARCHAR(18) NOT NULL

 

列级约束:只能使用列级约束语法定义;确保字段值不允许为空;只能在字段级定义;    

NULL值:所有数据类型的值都可以是NULL;空字符串不等于NULL;0也不等于NULL;

2.唯一约束(UNIQUE)#

 

1
2
NAME VARCHAR(18) UNIQUE NOT NULL

唯一性约束条件确保所在的字段或者字段组合不出现重复值;

      唯一性约束条件的字段允许出现多个NULL;

      同一张表内可建多个唯一约束;

      唯一约束可由多列组合而成;

      建唯一约束时MySQL会为止建立对应的索引;

      如果不给唯一约束起名,该唯一约束默认与列名相同;

    主键约束(PRIMARY KEY)  栗子:id INT PRIMARY KEY AUTO INCREMENT

      主键从功能上看相当于非空且唯一

      一个表中之允许一个主键

      主键是表中唯一确定一行数据的字段

      主键字段可以是单字段或者是多字段组合

      当建立主键约束时,MySQL为主键创建对应的索引

      主键约束名总为PRIMARY KEY

3.外键约束(FOREIGN KEY REFERENCE)#

  1. dept_id INT REFERENCE tb_dept(id) 

  2. 表内  CONSTRAINT FOREIGN KEY 外键名(建议是表名_约束名) (外键) REFERENCE  主表 (字段)

 

1
2
CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id)

3>表外  ALTER TABLE 表名 ADD [CONSTRAINT constraint] type (column);

 

1
2
ALTER TABLE tb_emp ADD CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id)

      外键是构建一个表的两个字段或者两个表的两个字段之间的关系

      外键确保了相关的两个字段的两个关系

      子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)

      当主表的记录被子表参照时,主表记录不允许被删除

      外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录

      格式FOREIGN KEY(外键列名) REFERENCE 主表(参照列)

4.CHECK约束#

 

1
2
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
2
3
4
5
6
7
8
9
10
11
12
13
14
#删除约束

#删除NOT NULL约束
ALTER TABLE tb_emp MODIFY NAME VARCHAR(18)

#删除UNIQUE约束
ALTER TABLE tb_emp DROP INDEX email

#删除PRIMAEY KEY约束 自动增长不能删除
ALTER TABLE tb_emp MODIFY id INT
ALTER TABLE tb_emp DROP PRIMARY KEY

#删除外键约束
ALTER TABLE tb_emp DROP FOREIGN KEY tb_emp_ibfk_1

 11.自动增长和默认值

  auto_increment只是MYSQL特有的,其他数据库里面没有,只能放在主键后面

  sex VARCHAR(2) DEFAULT ‘男’,