2016-11-23 10 views
1

Ceci est mon déclencheur.Erreur # 1054 dans 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 ; 

Je veux faire trigger sur 1 table (rezervare). Lorsque j'exécute le trigger, il a été créé.

Mais, quand j'insérer des données dans le tableau rezervare, il devient Code d'erreur: 1054. Unknown column « Data_Rezervarii » dans « liste des champs »

Je veux vérifier si une réservation est déjà dans la base de données pour cette date et masse nécessaire est déjà réservé à cette date

Répondre

0

de votre tentative, il semble que vous souhaitez insérer encore une nouvelle ligne avec le même Data_Rezervarii, mais avec NumarMasaNULL. Si oui, votre déclencheur devrait être quelque chose comme

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); 

Ensuite, il travaillerait comme ceci:

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) 

Mais si vous voulez vraiment sauter le nouveau record complètement si l'on existe déjà dans la table , il devrait être fait en ajoutant un index unique sur ces deux colonnes et en utilisant INSERT IGNORE.

+0

J'ai utilisé votre code Code d'erreur: 1193. La variable système inconnue 'NumarMasa' –

+0

Veuillez coller la sortie de 'SHOW CREATE TABLE Rezervare \ G',' SHOW CREATE TRIGGER verificare_masa \ G' et 'SHOW VARIABLES LIKE'% version% ''. Il est probable que vous avez manqué 'NEW' après' SET' - vous obtiendriez cette erreur exacte si vous essayiez de faire 'SET NumarMasa = ...' – elenst

+0

J'ai résolu le problème, donc: DELIMITER // CREATE TRIGGER verificare_masa AVANT INSERT la réservation POUR CHAQUE LIGNE BEGIN SI (SELECT COUNT (*) d'où la réservation NEW.Data_Rezervarii = Data_Rezervarii ET NEW.NumarMasa = NumarMasa) = 1 ALORS SET NEW.NumarMasa = NULL; END IF; END // DELIMITER; –