簡體   English   中英

MySQL Trigger中的錯誤#1054

[英]Error #1054 in MySQL Trigger

這是我的觸發器。

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'

我想檢查該日期的數據庫中是否已有預訂,並且已經為該日期保留了所需的質量

從您的嘗試來看,您似乎仍希望插入具有相同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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM