2016-11-23 23 views
1

これは私のトリガーです。MySQL Triggerのエラー#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」「フィールドリスト」で

は、私は予約がその日 のためのデータベースにすでにあるかどうかを確認したいと必要な質量は既にその日付に予約されています

答えて

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) 

しかし、あなたが実際ににしたい場合は、1つがすでにテーブルに存在している場合は、完全に新しいレコードをスキップこれらの2つの列にユニークなインデックスを追加し、INSERT IGNOREを使用して行う必要があります。

+0

私はあなたのコードを使用しましたエラーコード:1193.不明なシステム変数 'NumarMasa' –

+0

「SHOW CREATE TABLE Rezervare \ G」、「SHOW CREATE TRIGGER verificare_masa \ G'」および「SHOW VARIABLES LIKE」%version% ''。それはあなたがSET' 'の後に' NEW'を見逃している可能性があります - あなたは、この正確なエラーになるだろうあなたは '私は問題を解決しNumarMasa = ...' – elenst

+0

SET、そうしようとしていた場合:DELIMITER // CREATE TRIGGERをverificare_masa EACH ROWの予約 ON挿入する前 IF(FROM SELECT COUNT(*)をWHERE予約NEW.Data_Rezervarii = Data_Rezervarii AND NEW.NumarMasa = NumarMasa)BEGIN = 1 THEN SET NEW.NumarMasa = NULL; END IF; END // DELIMITER; –

関連する問題