错误代码:1109。字段列表中的未知表'新'

时间:2017-12-08 01:37:29

标签: mysql sql database mysql-workbench

我正在创建一个数据库,我用触发器验证输入数据。我成功添加了它们,但是当我尝试输入精确数据时出错。

创建数据库,表和触发器

CREATE DATABASE IF NOT EXISTS DBWorkers;

CREATE TABLE IF NOT EXISTS Ludzie(
PESEL char(11) NOT NULL,
imie varchar(30) NOT NULL,
nazwisko varchar(30) NOT NULL,
data_urodzenia date NOT NULL,
wzrost float NOT NULL,
waga float NOT NULL,
rozmiar_buta int NOT NULL,

PRIMARY KEY(PESEL));

DELIMITER $$
CREATE FUNCTION check_pesel(PESEL char(11)) RETURNS bool
BEGIN
IF(
    CHAR_LENGTH(NEW.PESEL) <> 11 AND
    CONVERT(PESEL, SIGNED INT) > 0 AND
    CONVERT(LEFT(PESEL,2), SIGNED INT) BETWEEN 0 AND 99 AND
    CONVERT(SUBSTRING(PESEL,3,2), SIGNED INT) BETWEEN 1 AND 12 AND
    CONVERT(SUBSTRING(PESEL,3,2), SIGNED INT) BETWEEN 1 AND     DAY(LAST_DAY(CONCAT('19',LEFT(PESEL,2),'-',SUBSTRING(PESEL,3,2),'-01')))
    )
    THEN
        RETURN TRUE;
    ELSE
        RETURN FALSE;
END IF;
END $$

CREATE TRIGGER `ludzie_data_check_before_insert` BEFORE INSERT ON `Ludzie`
FOR EACH ROW
BEGIN
IF NOT(
        check_pesel(NEW.PESEL) AND
        NEW.WZROST > 0.0 AND
        NEW.WAGA > 0.0 AND
        NEW.ROZMIAR_BUTA > 0
    )
THEN
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = 'check on Ludzie failed during insert';
END IF;
END $$
DELIMITER ;

当我尝试按

输入数据时
INSERT INTO Ludzie VALUES ('7810396705', 'Anders', 'Kennedy','1958-08-20', 1.70, 88.6, 43)

我得到了

Error Code: 1109. Unknown table 'new' in field list

我已经尝试打开和关闭mysql服务器,检查我是否正在向正确的数据库执行此操作。一切看起来都很好,但事实并非如此:/

2 个答案:

答案 0 :(得分:2)

我想我找到了你的问题:

CHAR_LENGTH(NEW.PESEL) <> 11 AND
CONVERT(PESEL, SIGNED INT) > 0 AND

这是NEW.PESEL和PESEL的不一致用法,您不应该在不向数据库添加任何内容的函数中使用关键字new。在此上下文中,错误将NEW识别为表而不是关键字。

答案 1 :(得分:1)

是的,在做了一些阅读后我也愿意打赌

中不需要“NEW”关键字

CHAR_LENGTH(NEW.PESEL)。

NEW关键字用于更新和插入命令。