2016-11-23 14 views
1

Это мой триггер.Ошибка # 1054 в 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» в «списке поля»

Я хочу, чтобы проверить, если заказ уже в базе данных для этой даты и требуемая масса уже зарезервирована для этой даты

ответ

0

С вашей точки зрения кажется, что вы хотите по-прежнему вставить новую строку с тем же Data_Rezervarii, но с NumarMasaNULL. Если да, то триггер должен быть чем-то вроде

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.

+0

Я использовал ваш код Код ошибки: 1193. Неизвестная системная переменная 'NumarMasa' –

+0

Вставьте вывод 'SHOW CREATE TABLE Rezervare \ G',' SHOW CREATE TRIGGER verificare_masa \ G' и 'SHOW VARIABLES LIKE '% version% «'. Вероятно, вы пропустили 'NEW' после' SET' - вы получили бы эту точную ошибку, если бы пытались сделать 'SET NumarMasa = ...' – elenst

+0

Я решил проблему, поэтому: DELIMITER // CREATE TRIGGER verificare_masa ПЕРЕД ВСТАВИТЬ на бронирование для каждой строки НАЧАТЬ IF (SELECT COUNT (*), откуда резервации NEW.Data_Rezervarii = Data_Rezervarii И NEW.NumarMasa = NumarMasa) = 1 ТОГДА SET NEW.NumarMasa = NULL; END IF; END // DELIMITER; –