Mysql
是否可以在不回滾的情況下防止插入?
在 MySQL 5.5 中,我知道我可以通過使用來防止插入
SIGNAL
,這會回滾我的目前事務INSERT
。事實是我想使用觸發器在另一個表中插入一行,但我想用它來替換原來的插入。如果我
SIGNAL
在觸發器中使用新的插入語句也將被取消。例子:
如果我做
INSERT INTO table_a VALUES('a','b');
我想在 a 中有一個新行,
table_b
但在table_a
.(我只想在少數情況下替換原來的插入。)
在MySQL中可以嗎?如果是,我該怎麼做?
我無法提供確切的細節,但我相信還有 2 種方法是可能的:
- 在 table_a 上使用黑洞引擎
- 使用代理sql
使用黑洞引擎
這似乎是最簡單的解決方案。
BLACKHOLE 儲存引擎充當“黑洞”,接受數據但將其丟棄而不儲存。
有關詳細資訊,請參閱MySQL 5.5 文件。
首先,如果您需要保留它,
table_a
您需要使用黑洞引擎創建它的副本;CREATE TABLE table_a( id INT unsigned auto_increment primary key, field CHAR(5) )Engine=InnoDB; CREATE TABLE table_blackhole( id INT unsigned auto_increment primary key, field CHAR(5) )Engine=BLACKHOLE;
然後,在 上創建觸發器
table_blackhole
。在觸發器內部,使用
- 正常治療的
INSERT
ontable_a
(例如)(我們不阻止插入)- 或針對特定處理的
INSERT
ontable_b
(我們“阻止”正常插入但沒有回滾)。不要在 中插入行,
table_a
而是INSERT
在table_blackhole
.