check约束其实就是一个检查功能,反正就是对输入数据的一个限制,如果不满足限制,那么就无法插入数据。
mysql> create table gender(id int primary key auto_increment,name varchar(20),sex varchar(2),
-> check(sex='男' or sex='女' or sex='秘密'));
Query OK, 0 rows affected (0.04 sec)
mysql> desc gender;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| sex | varchar(2) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> insert into gender values(null,'z1','秘密');
Query OK, 1 row affected (0.00 sec)
mysql> insert into gender values(null,'z2','女');
Query OK, 1 row affected (0.00 sec)
mysql> insert into gender values(null,'z3','男');
Query OK, 1 row affected (0.00 sec)
mysql> select * from gender;
+----+------+------+
| id | name | sex |
+----+------+------+
| 1 | z1 | 秘密 |
| 2 | z2 | 女 |
| 3 | z3 | 男 |
+----+------+------+
3 rows in set (0.00 sec)
mysql> insert into gender values(null,'z3','123');
ERROR 1406 (22001): Data too long for column 'sex' at row 1
mysql> insert into gender values(null,'z3','12');
ERROR 3819 (HY000): Check constraint 'gender_chk_1' is violated.
mysql> select * from gender;
+----+------+------+
| id | name | sex |
+----+------+------+
| 1 | z1 | 秘密 |
| 2 | z2 | 女 |
| 3 | z3 | 男 |
+----+------+------+
3 rows in set (0.00 sec)