gpt4 book ai didi

mysql - MySQL 触发器中的错误#1054

转载 作者:行者123 更新时间:2023-11-30 22:08:52 25 4
gpt4 key购买 nike

这是我的触发器。

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<来完成.

关于mysql - MySQL 触发器中的错误#1054,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40769030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com