我可以在 MySQL 中向子项添加检查约束以检查其父项的值吗?

Can I add a check constraint to a child checking the value of its parent in MySQL?

我有一个类似的数据库,其中有两个表如下:

+----------------------+           +------------------------+
|Persons               |           |phones                  |
+----------------------+           +------------------------+
|id       int          +-----+     |id          int         |
|name     varchar(100) |     +---->+person_id   int         |
|allowed  tinyint(1)   |           |number      int         |
+----------------------+           +------------------------+

一个人可以拥有任意多部手机,但必须允许他使用(允许 > 0)。

所以,我使用

创建了两个表
CREATE TABLE `phones` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `persons_id` int(11) DEFAULT NULL,
  `phonenumber` int(5) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `phones_ibfk_1` (`persons_id`),
  CONSTRAINT `phones_ibfk_1` FOREIGN KEY (`persons_id`) REFERENCES `persons` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8` 

但这并没有检查我想要的。我想知道是否可以进行 ALTER TABLE phones ADD CONSTRAINT chk_person CHECK (persons.allowed > 0) 之类的查询。这可能吗?还有其他选择吗?

检查约束不起作用解决方案是在之前创建触发器 insert 所以你检查值如果你发现一些错误的东西插入到相同的 table 中会导致 erreur in

DELIMITER ||
CREATE TRIGGER  trigger_check  before insert ON phones  FOR EACH ROW 
begin 
DECLARE is_allowed boolean;
select allowed into @is_allowed from Persons where id = new.person_id;
if @is_allowed <1 then 
  insert into phones values ('','','','');  #make erreur doesn't metter
  end if ;
end ||
DELIMITER ;

这就是我们现在的做法,希望检查约束在新版本中有效