是在插入到某個表之前設置的MySQL觸發器,當我調用INSERT IGNORE並插入被忽略時執行?在INSERT IGNORE插入之前的MySQL觸發器
回答
這裏有一個演示:
mysql> create table foo (foo_id int primary key);
mysql> create table bar (foo_id int);
mysql> create trigger foo_ins before insert on foo
for each row insert into bar set foo_id = new.foo_id;
mysql> insert ignore into foo set foo_id=123;
Query OK, 1 row affected (0.01 sec)
mysql> insert ignore into foo set foo_id=123;
Query OK, 0 rows affected, 1 warning (0.00 sec)
這應該已經插在foo表只有一行,因爲第二次嘗試將與主鍵值衝突。我們看到第二次插入會影響0行,這意味着沒有插入新行。
讓我們來看看在吧檯的效果是什麼:
mysql> select * from bar;
+--------+
| foo_id |
+--------+
| 123 |
| 123 |
+--------+
兩行插入。這證明即使在插入忽略時觸發器也被觸發。
是的,我也試過了,但你回答得更快。 當行被忽略時,是否有一些選項可以停止執行觸發器? –
@Jan,我能想到的唯一解決方案就是將你的代碼放在'AFTER INSERT'觸發器中。如果發生錯誤,導致插入不發生(如違反唯一約束或非空約束),它將在執行AFTER觸發器之前中止。 –
是的,我想使用'AFTER INSERT'觸發器,但已經有另一個更重要,我不想在其中混合另一個邏輯。 –
- 1. MySQL的觸發器插入之前
- 2. 插入之前的MySQL和觸發器
- 3. MySQL觸發器:插入之前或之後插入
- 4. Oracle之前INSERT觸發器
- 5. MySQL - 插入觸發語法之前?
- 6. 插入觸發器之前的SQL
- 7. INSERT觸發器之前的性能問題,與插入
- 8. 之前插入觸發SQL
- 9. MariaDB之前爲UUID插入觸發器
- 10. 在機會插入觸發器之前
- 11. 插入值之前的MySQL觸發器檢查
- 12. 插入觸發器之前的Mysql SET失敗
- 13. MySQL的觸發前INSERT
- 14. 之前插入觸發器不設置值分析insert語句之前
- 15. 的MySQL,觸發器,插入之前生成主鍵的排
- 16. MySQL的觸發器 - 插入
- 17. MySQL - 在插入之前創建觸發器來替換日期
- 18. BEFORE INSERT觸發器,在多個插入
- 19. 如何在插入觸發器之前中斷插入查詢mysql
- 20. 觸發器在插入MySQL之前生成唯一標識號
- 21. MySQL觸發器在插入多次之前檢查值
- 22. mysql觸發器插入
- 23. 在插入觸發器之前停止插入PL/SQL
- 24. MySQL之前插入觸發器填充省略列
- 25. 如何在更新觸發之前更改插入觸發器之前?
- 26. 在插入觸發器阻止執行以下INSERT INTO語句之前
- 27. 在插入之前觸發MySQL時的更改類型
- 28. 在插入之前觸發處理ORDImage
- 29. 在插入多個表之前觸發
- 30. MySql在插入之前觸發不起作用
看看這個[討論](https://bugs.mysql.com/bug.php?id=13473)。在其他數據庫(如Oracle)中,即使沒有插入操作發生,觸發器也會觸發。這在MySQL中似乎是相同的行爲。 –