【发布时间】:2020-10-16 10:00:35
【问题描述】:
在 MySQL 上,我对车辆表的“loueur_id”列进行的约束存在问题。我试图做到这一点,当列位置具有“disponible”或“en_revision”作为值时,“loueur_id”的值变为空,但如果“位置”的值为 NULL,则“loueur_id”值成为租车的客户
CREATE TABLE IF NOT EXISTS `vehicule` (
`id` int NOT NULL AUTO_INCREMENT,
`typ` int NOT NULL UNIQUE,
`nb` int NOT NULL,
`caract` json NOT NULL,
`location` varchar(20),
`photo` varchar(20) NOT NULL,
`loueur_id` int,
PRIMARY KEY (`id`),
INDEX per_loueur (`loueur_id`),
FOREIGN KEY(`loueur_id`) REFERENCES `client`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
ALTER TABLE `vehicule`
ADD CONSTRAINT CK_location CHECK ((`location` in('disponible', 'en_revision')))
ADD CONSTRAINT CK_loueur CHECK (`loueur_id` = CASE WHEN `location` in('disponible', 'en_revision' THEN NULL ELSE `loueur_id` END CASE));
这是我试图做的,但 mysql 说我在最后一个 Check 约束上犯了语法错误。有人可以帮我找到问题的解决方案吗?
【问题讨论】:
-
end case???那是什么?第二个约束逻辑什么都不做,因为check约束允许NULL值。 -
既然做了CASE声明,就写了“end case”来结束它。第二个限制是将 NULL 放在“loueur_id”而不是“location”上。
标签: mysql sql create-table check-constraints