约束的字面意思就是规定或者限制某个事该如何去做,在MySQL中,约束就是对数据表中数据指定规则,也就是对数据进行限制,以此来确保可靠性,比如不允许某列出现Null值,实际中我们会遇到以下类型的约束。
NOT NULL
: 确保列不能有NULL值CHECK
: 确保列中的值满足特定条件UNIQUE
: 确保一列中的所有值都不同PRIMARY KEY
:NOT NULL
和UNIQUE
组合,唯一标识表中的每一行FOREIGN KEY
: 外键约束DEFAULT
: 如果未指定值,则为列设置默认值
【相关推荐:mysql视频教程】
约束
1.NULL
MySQL中通过使用NOT NULL
来1源gaodai#ma#com搞*代#码1网确保列中不会出现Null值,创建表时候格式如下:
mysql> create table user(name varchar(255)not null); Query OK, 0 rows affected (0.06 sec)
如果试图插入一个null值,则会抛出异常。
mysql> insert user values(null); ERROR 1048 (23000): Column 'name' cannot be null
或者在现有表上新增NOT NULL
约束。
mysql> alter table user modify name varchar(255) not null; Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0
删除NOT NULL
约束。
mysql> alter table user modify name varchar(255) null; Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0
2.CHECK
如果想在列上定义条件约束,可以使用CHECK,比如下面,强制让年龄字段大于18,小于80,否则将会报错。
mysql> create table user(age int(11) check(age>18 and age <80)); Query OK, 0 rows affected, 1 warning (0.06 sec)
插入测试,可以发现9、81在插入的时候抛出异常。
mysql> insert user values(9); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(19); Query OK, 1 row affected (0.01 sec) mysql> insert user values(81); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql>
也可以进行多列约束,如年龄必须大于18,城市必须为中国。
mysql> create table user(age int(11),city varchar(255) ,check(age>18 and city='中国')); Query OK, 0 rows affected, 1 warning (0.05 sec)
插入测试。
mysql> insert user values(81,'2'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(8,'2'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(20,'2'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(20,'中国'); Query OK, 1 row affected (0.01 sec) mysql> insert user values(20,'中国1'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated. mysql> insert user values(85,'中国'); Query OK, 1 row affected (0.01 sec) mysql> insert user values(9,'中国'); ERROR 3819 (HY000): Check constraint 'user_chk_1' is violated.
还可以让列值必须在指定集合中,如性别必须在男、女、未知、人妖集合中。
mysql> create table user(sex varchar(255) check (sex in ('男','女','未知','人妖'))); Query OK, 0 rows affected (0.05 sec)