MySQL Trigger中的错误#1054

时间:2016-11-23 16:00:33

标签: mysql triggers mysql-error-1054

这是我的触发器。

DELIMITER //
CREATE TRIGGER verificare_masa
BEFORE INSERT ON Rezervare
FOR EACH ROW 
BEGIN
IF (NEW.Data_Rezervarii=Data_Rezervarii) AND (NEW.NumarMasa=NumarMasa) THEN 
    SET NEW.NumarMasa= NULL;

END IF;
END //
DELIMITER ;

我想在1张桌子上进行触发(rezervare)。

当我执行触发器时,它已被创建。但是,当我将数据插入表rezervare时,它变成了 错误代码:1054。“字段列表”中的未知列'Data_Rezervarii'

我想检查该日期的数据库中是否已有预订 并且已经为该日期保留所需的质量

1 个答案:

答案 0 :(得分:0)

根据您的尝试,您似乎仍希望使用相同的Data_Rezervarii插入新行,但使用NumarMasa NULL。如果是这样,你的触发器应该是

CREATE TRIGGER verificare_masa 
BEFORE INSERT ON Rezervare FOR EACH ROW 
SET NEW.NumarMasa = IF(EXISTS(
  SELECT 1 FROM Rezervare 
  WHERE Data_Rezervarii=NEW.Data_Rezervarii 
    AND NumarMasa = NEW.NumarMasa
  ),NULL,NEW.NumarMasa);

然后就会这样:

MariaDB [test]> select * from Rezervare;
+-----------------+-----------+
| Data_Rezervarii | NumarMasa |
+-----------------+-----------+
| 2016-12-12      |         1 |
| 2016-12-12      |         2 |
| 2016-12-13      |         3 |
+-----------------+-----------+
3 rows in set (0.00 sec)

MariaDB [test]> INSERT INTO Rezervare VALUES ('2016-12-12',1),('2016-12-12',4);
Query OK, 2 rows affected (0.20 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from Rezervare;
+-----------------+-----------+
| Data_Rezervarii | NumarMasa |
+-----------------+-----------+
| 2016-12-12      |         1 |
| 2016-12-12      |         2 |
| 2016-12-13      |         3 |
| 2016-12-12      |      NULL |
| 2016-12-12      |         4 |
+-----------------+-----------+
5 rows in set (0.00 sec)

但是,如果你真的希望完全跳过新记录(如果表中已存在),则应该通过在这两列上添加唯一索引并使用INSERT IGNORE来完成。