我有两个表如下一个类似的数据库:他想我可以添加一个检查约束到一个孩子检查其父母在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)
的查询。这可能吗?还有另一种选择?
毫无意义的努力。如果'allowed'是'0',那么在你的服务器端代码中就不要执行插入操作。关系数据库负责**关系**,而不是**权限**。此外,如果某人在'phones'中有'n'记录,并且您将其'allowed'设置为'0',则您的服务器端代码可以简单地忽略对'phones'的查询并且不显示任何内容。您不必使用RDBMS来完成每一件事,它只需要处理数据,而不是某人可以或不可以做的事情。 – Mjh
@Mjh DB负责数据完整性。 –
@Golinmarq你可能需要一个触发器来处理这个限制。 –