关于MYSQL 检查check约束

MYSQL 目前版本貌似不支持 SQL标准的 检查约束(check);

SQL如:

ALTER TABLE emp ADD CONSTRAINT ck_emp_sex CHECK
(sex ='男' OR sex='女');

CHECK子句会被分析,但是会被忽略。请参见13.1.5节,“CREATE TABLE语法”。接受这些子句但又忽略子句的原因是为了提高兼容性,以便更容易地从其它SQL服务器中导入代码,并运行应用程序,创建带参考数据的表。请参见1.8.5节,“MySQL与标准SQL的差别”。

但使用过程往往需要MYSQL 提供类似check约束的DDL语句;

可以使用SQL枚举值:

ALTER TABLE emp MODIFY sex ENUM("男","女");

1 查询雇员表:

SELECT * FROM emp;

empno  ename         deptno  sal   sex 
1      张三        10      2000  女 
2      李四        10      3000  男 
3      xiaohong      10      4000  男 
4      杨国        10      5000  男 
5      苏三        20      8000  男  
 

2 修改雇员编号1 的性别为 人妖;

UPDATE emp SET sex ='人妖' WHERE empno =1 ; 

执行结果:

(1 row(s) affected, 1 warning(s))
Execution Time : 00:00:00:156
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:156

Note : To see complete list of warning(s), enable Tools -> Preferences -> General -> Show Warning(s) in Messages Tab

3 再次查询

empno  ename         deptno  sal   sex 
1      张三        10      2000      
2      李四        10      3000  男 
3      xiaohong      10      4000  男 
4      杨国        10      5000  男 
5      苏三        20      8000  男 

雇员编号为1 的张三 性别为 空;

4 插入语句

INSERT INTO emp VALUE ('张飞', 10, 3000, '人妖');

Query : insert into emp value ('张飞', 10, 3000, '人妖')
Error Code : 1136
Column count doesn't match value count at row 1
Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

报错切插入失败!

猜你喜欢

转载自fanjf.iteye.com/blog/2044570