关于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
报错切插入失败!