Mysql

是否可以在不回滾的情況下防止插入?

  • March 8, 2018

在 MySQL 5.5 中,我知道我可以通過使用來防止插入SIGNAL,這會回滾我的目前事務INSERT

事實是我想使用觸發器在另一個表中插入一行,但我想用它來替換原來的插入。如果我SIGNAL在觸發器中使用新的插入語句也將被取消。

例子:

如果我做

INSERT INTO table_a VALUES('a','b');

我想在 a 中有一個新行,table_b但在table_a.

(我只想在少數情況下替換原來的插入。)

在MySQL中可以嗎?如果是,我該怎麼做?

我無法提供確切的細節,但我相信還有 2 種方法是可能的:

  1. 在 table_a 上使用黑洞引擎
  2. 使用代理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

在觸發器內部,使用

  • 正常治療的INSERTon table_a(例如)(我們不阻止插入)
  • 或針對特定處理的INSERTon table_b(我們“阻止”正常插入但沒有回滾)。

不要在 中插入行,table_a而是INSERTtable_blackhole.

引用自:https://dba.stackexchange.com/questions/199012