mysql - 如何在 MySQL 表上添加自定义 CHECK 约束?

标签 mysql sql database constraints check-constraints

我在处理这张表时遇到了问题

CREATE TABLE `Participants` (
  `meetid` int(11) NOT NULL,
  `pid` varchar(15) NOT NULL,
  `status` char(1) DEFAULT NULL,
  PRIMARY KEY (`meetid`,`pid`),
  CONSTRAINT `participants_ibfk_1` FOREIGN KEY (`meetid`) REFERENCES `Meetings` (`meetid`) ON DELETE CASCADE
  CONSTRAINT `participants_ibfk_2` CHECK (status IN ('a','d','u'))
  CONSTRAINT `participants_ibfk_3` CHECK (pid IN (SELECT name FROM Rooms) OR pid IN (SELECT userid FROM People))
);

我想要一个外键约束,这行得通。然后,我还想向属性 status 添加一个约束,使其只能取值“a”、“d”和“u”。我无法将字段设置为 Enumset

谁能告诉我为什么这段代码在 MySQL 中不起作用?

最佳答案

MySQL 不支持

CHECK 约束。您可以定义它们,但它们什么都不做(从 MySQL 5.7 开始)。

来自manual :

The CHECK clause is parsed but ignored by all storage engines.

解决方法是创建 triggers ,但它们并不是最容易使用的东西。

如果您想要一个支持 CHECK 约束的开源 RDBMS,请尝试 PostgreSQL .它实际上是一个非常好的数据库。

关于mysql - 如何在 MySQL 表上添加自定义 CHECK 约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46336031/

相关文章:

python - 在 sqlalchemy 中使用带有参数的子查询

sql - 在 SQL Server 中查找重复的县名

sql - 如何规范化可以链接到一个或多个表的表?

database - GROUP_CONCAT 和 DISTINCT 很棒,但是我如何删除仍然存在的这些重复项?

mysql - 2017 年最佳免费 MySQL 分析器

mysql - 如何提高嵌套集模型中数千个插入的速度?

mysql - 将不同的列分组为一行

php - 在文本框中显示两个值

所需格式和表格的 Mysql 数据

java - 使用 JOOQ,如何将 SQLException 映射到业务异常?