我知道InnoDB强制执行外键。是否有MySQL / MariaDB的引擎真正实现了CHECK?
假设我使用以下命令创建一个表:
create table a(t timestamp not null, check (t > '2014-05-01')) ENGINE=InnoDB;
我尝试插入一个假设无效的行:
insert into a(t) values('2014-01-01');
使用InnoDB的MySQL允许插入该无效行。我想使用一个不接受插入的引擎。那个工作有引擎吗?
答案 0 :(得分:1)
MySQL中没有这样的引擎。如果必须在数据库级别进行检查,则唯一的选择是使用触发器并在那里验证数据。
答案 1 :(得分:1)
CHECK约束在MariaDB 10.2中按预期工作,目前是测试版。 https://jira.mariadb.org/browse/MDEV-7563