mysql check constraint doesn't work

问题

今天创建了一个表,想对其中一个字段进行数值范围限定,如:

create table persons (
    id int primary key auto_increment,
    name varchar(255) not null,
    age intcheck (age > 0 and age < 150)
);

那好表后,还是能插入age不为0~150范围内的值的记录。

参照w3schools, 的确是这样写的,为什么不起作用呢?

原因

在mysql的官网教程中,13.1.17 CREATE TABLE Syntax 小节中有这样一段话:

For other storage engines, MySQL Server parses and ignores the FOREIGN KEY and REFERENCES syntax in CREATE TABLE statements. The CHECK clause is parsed but ignored by all storage engines. See Section 1.7.2.3, “Foreign Key Differences”.

Check clause 会被所有的存储引擎解析但是忽略。

解决方法

参照 stackoverflow, 创建两个触发器,在插入数据和更新数据前,对要校验的数据进行验证。

不符合条件的记录处理

通过调用一个不存在的function,来触发mysql的异常。参照这个文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值