mysql - 无法在日期字段上添加外键约束

标签 mysql sql

我有以下 SQL 语句:

CREATE TABLE patient(
  Name varchar(255),
  Geburtsdatum date,
  CONSTRAINT pk_patient PRIMARY KEY (Name,Geburtsdatum)
);

CREATE TABLE fake(
  Name varchar(255),
  PName varchar(255),
  PGeburtsdatum date,
  CONSTRAINT pk_fake PRIMARY KEY (Name,PName,PGeburtsdatum),
  CONSTRAINT fk_PName2 FOREIGN KEY (PName) REFERENCES patient(Name) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_PGeburtsdatum FOREIGN KEY (PGeburtsdatum) REFERENCES patient(Geburtsdatum) ON DELETE CASCADE ON UPDATE CASCADE
);

这给了我错误“#1215 - 无法添加外键约束”。如果我删除第二个表创建中的最后一个约束,一切正常。我所有其他外键约束的工作方式完全相同。我在这里缺少什么?

最佳答案

不确定为什么将 mysql 问题标记为 db2。无论如何,MySQL documentation状态:

MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan

所以在Geburtsdatum列中添加一个索引:

CREATE TABLE patient(
  Name varchar(255),
  Geburtsdatum date,
  INDEX (Geburtsdatum),
  CONSTRAINT pk_patient PRIMARY KEY (Name,Geburtsdatum)
);

关于mysql - 无法在日期字段上添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20313822/

相关文章:

MySQL JOIN LIMIT 动态查询优化

mysql - 更新Ubuntu 18.4后无法启动mysql服务器

mysql - 简单的mysql数据库

php - 查询返回数据以及来自另一个表的数据

sql 在一个表上多次插入,同时在另一个表上循环/迭代?

MySQL CSV 导入失败 - "Data too long for column ' air_date' 在第 1 行”

MySQL查询速度极慢

mysql - 在第 3 列的基础上选择 2 个匹配的列

c# - 我们在 MS-Access 中有交易吗?

java - 检查和删除数据库中的 2 个值时 Hibernate JPA 出错