首页 > 解决方案 > mysql忽略检查约束

问题描述

我有这段代码,我想在 MySQL 中实现它,但不支持 CHECK。我该怎么做?

CREATE TABLE Fare (
    type_of_passenger varchar(20),
    price FLOAT,
    PRIMARY KEY (type_of_passenger),
    CHECK (lower(type_of_passenger)='child' OR lower(type_of_passenger)='student' OR lower(type_of_passenger)='senior')
);

标签: mysqlsql

解决方案


你确定你需要那张支票吗?由于主键是type_of_passenger您只能拥有三行..这似乎有点过头了

您可以只INSERT使用这 3 行并继续前进。如果您在外键中引用此字段,则无论如何您都将被限制为表中的值

事实上,一旦您使用使用 ON UPDATE RESTRICT 和 ON DELETE RESTRICT 的外键引用每个值,您将无法更改它们

我可以在这里看到的唯一有效的问题是您希望允许数据库用户更改price但不是type_of_passenger

如果您INSERT从正确(或存根)数据开始,则可以通过权限控制表和列访问

注意我会在这里使用一个代理无符号整数主并且唯一的字符串描述,因此如果我确实需要更改字符串,我可以不用担心,并且不会影响更新所有引用它的表的性能


推荐阅读