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子句来执行此操作。(而不是抛出一个错误)我希望类型值是音频,图像或视频,我想抛出一个错误,以显示在网站上。可能的重复和是的,种。我将接受第一个答案,而不是关闭线程,因为它可能对某人有用。谢谢,我投票决定重新开业。对于链接的“复制”,还有另一个解决方案不是合适的答案,但对于这个问题,它可以很好地工作。(外键指向另一个表。)