我在 MySQL 中创建了一个表(请参阅下面的代码)。正如您在代码中看到的,我有一个引用 idNo 的外键管理器。不过,我只想引用带有 cat='B' 的员工。所以我需要类似的东西
FOREIGN KEY (manager ) REFERENCES Employee(idNo WHERE cat='B').
有什么想法可以实现这一点。
idNo SMALLINT AUTO_INCREMENT UNIQUE,
name VARCHAR(25) NOT NULL,
telNo INT(11) NOT NULL,
cat CHAR(1) NOT NULL,
manager SMALLINT,
PRIMARY KEY (idNo ),
FOREIGN KEY (manager ) REFERENCES Employee(idNo) on DELETE CASCADE)ENGINE=INNODB
AUTO_INCREMENT=1000;
最佳答案
外键不允许条件。
如果你想强制条件,你必须通过编码来完成。
它可以在您的非数据库代码(Java、PHP、VB...)中完成,或者您可以在 MySQL 中创建一个过程,该过程将被调用来执行插入,并且如果条件满足,它将返回错误代码不匹配。
如果您从不同的代码/应用程序插入,则该过程是可行的方法,因为它将是集中式的。
关于MySQL 外键引用 WHERE 字段=值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22443780/