mysql+check+男或女_关于MYSQL 检察check约束

本文探讨了MySQL当前版本不支持标准SQL检查约束的情况,通过实例展示了如何用ENUM类型替代。更新雇员信息时,虽然UPDATE语句未报错,但结果异常。同时,插入错误记录了SQL错误。了解了MySQL对标准SQL兼容性的考虑和工作方式。
摘要由CSDN通过智能技术生成

关于MYSQL 检查check约束 MYSQL 目前版本貌似不支持 SQL标准的 检查约束(check); SQL如: ALTER TABLE emp ADD CONSTRAINT ck_emp_sex CHECK (sex ='男' OR sex='女'); ? CHECK子句会被分析,但是会被忽略。请参见13.1.5节,“CREATE?TABLE语法”。接受这

关于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

?

报错切插入失败!

?

?

?

?

?

?

?

?

1 楼

fanjf

11 小时前

为什么 update 不报错,结果为空?

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值