MySQL中的Check约束
可能重复:MySQL中的Check约束,mysql,triggers,Mysql,Triggers,可能重复: 我有一个使用CHECK的表定义,但由于MySQL不支持此功能,我需要做一些不同的事情。我们的想法是在这张表上的INSERT或UPDATE之前使用触发器,但我不知道怎么做 这是表格: CREATE TABLE IF NOT EXISTS `smeii_media` ( `id` INTEGER AUTO_INCREMENT, `type` VARCHAR(5) NOT NULL, `title` VARCHAR(100) NOT NULL, `desc
我有一个使用
CHECK
的表定义,但由于MySQL不支持此功能,我需要做一些不同的事情。我们的想法是在这张表上的INSERT
或UPDATE
之前使用触发器,但我不知道怎么做
这是表格:
CREATE TABLE IF NOT EXISTS `smeii_media` (
`id` INTEGER AUTO_INCREMENT,
`type` VARCHAR(5) NOT NULL,
`title` VARCHAR(100) NOT NULL,
`description` VARCHAR(500),
`path` VARCHAR(100) NOT NULL,
UNIQUE(`path`),
PRIMARY KEY(`id`),
CONSTRAINT chk_media CHECK (`type`='audio' OR `type`='image' OR `type`='video')
) ENGINE=InnoDB;
这里是触发点:
DELIMITER $$
CREATE TRIGGER smeii_media_briu BEFORE INSERT OR UPDATE FOR EACH ROW
BEGIN
IF NEW.type != 'audio' AND NEW.type != 'image' AND NEW.type != 'video'
THEN
END IF;
END;
DELIMITER $$
我可以在if块中放入什么来抛出错误?而不是在触发器中抛出错误(实际上不受支持),如果您使用以下子句:
BEGIN
IF NEW.type = 'audio' OR NEW.type = 'image' OR NEW.type = 'video'
THEN
END IF;
忽略其他一切 您试图为/限制选择什么?似乎您可以重新安排IF子句来执行此操作。(而不是抛出一个错误)我希望类型值是音频,图像或视频,我想抛出一个错误,以显示在网站上。可能的重复和是的,种。我将接受第一个答案,而不是关闭线程,因为它可能对某人有用。谢谢,我投票决定重新开业。对于链接的“复制”,还有另一个解决方案不是合适的答案,但对于这个问题,它可以很好地工作。(外键指向另一个表。)