使用MySQL在列名称中使用连字符/破折号创建触发器

时间:2017-04-15 19:00:09

标签: mysql triggers

我正在尝试在现有的MySQL数据库中创建一个触发器。我想要创建的触发器很简单

    DELIMITER $$

    CREATE TRIGGER `prmadd02_cecsproject`.`prmadd02_room_checkNumberOfBeds` 
    BEFORE INSERT ON `prmadd02_room` 
    FOR EACH ROW
    BEGIN

        IF NEW.number-beds < 1 OR NEW.number-beds > 3
        THEN
            SET @s0 = 'Number of Beds must be between 1 and 3!';
            SIGNAL SQLSTATE '45000' SET message_text = @s0;
        END IF;

    END

    $$

    DELIMITER ;

但是当我尝试执行此代码时,我收到以下错误:

Error Code: 1054. Unknown column 'number' in 'NEW'

在有人要求之前,我不能改变列名。

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

只需将反引号添加到列名称:

DELIMITER $$
CREATE TRIGGER `prmadd02_cecsproject`.`prmadd02_room_checkNumberOfBeds` 
BEFORE INSERT ON `prmadd02_room` 
FOR EACH ROW
BEGIN
    IF NEW.`number-beds` < 1 OR NEW.`number-beds` > 3
    THEN
        SET @s0 = 'Number of Beds must be between 1 and 3!';
        SIGNAL SQLSTATE '45000' SET message_text = @s0;
    END IF;
END
$$
DELIMITER;

使用这些字符命名数据库列不是一个好习惯,因为当您运行它时,数据库会认为您正在执行操作,因此您必须使用ESCAPE来使用它。反击是你如何做到的。