2014-10-29 42 views
3

我在phpMyAdmin中使用Mysql,我必須從tableA中刪除一個條目,如果我插入了具有相同主鍵的行。我想在tableA的觸發器中執行該操作前插入 對於防爆, 如果表A中包含在Mysql中修改表從它自己的觸發器 - PhpMyAdmin

1 Hai Hello 

這裏1是主鍵

現在,如果我插入一行1 Bye Hello則觸發BEFORE INSERT將刪除舊的條目,然後新行(第2個)將被插入。但是Mysql限制了無法更新爲同一個表定義的觸發器中的表。

它給人的錯誤

#1442 - 因爲它已經使用由調用 此存儲函數/觸發語句存儲 功能/觸發無法更新表「表A」。

所以我改變了我的方式,我從tableA的BEFORE INSERT調用了一個過程,並且在那個過程中我做了我認爲在觸發器中做的任務。但不幸的是,我得到了同樣的錯誤。 在觸發BEFORE INSERT我只是調用的過程作爲

CALL proce1(new.Reg_No); 

在過程我已經做到了這一點

DECLARE toup integer; 
    select count(*) into toup from tableA where Reg_No=reg;/*Here Reg_No is primary key */ 
     if toup > 0 then 
    delete from tableA where Reg_No=reg; 
    end if; 

需要一些其他的想法來實現這一目標。幫我.....

+0

你爲什麼要刪除?你想要替換舊數據還是真的刪除記錄? – Jaylen 2014-10-29 18:11:57

+0

@Mike我想刪除舊記錄並插入新記錄。我只是從.csv文件插入新的值這裏舊值不能更新,所以我想在插入前刪除它 – user3784251 2014-10-29 18:15:11

回答

2

我不喜歡使用觸發器,因爲他們很難管理事端。他們也會導致你的表現降級。我不反對觸發因爲在某些情況下他們可以很方便。

你的情況,你有使用雖然還是REPLACE(....)INSERT INTO .... ON DUPLICATE KEY UPDATE甚至INSERT INTO IGNORE .....

REPLACE(....)將刪除記錄,如果記錄被找到並插入一個新的具有相同ID的。

INSERT INTO .... ON DUPLICATE KEY UPDATE將允許您覆蓋現有的字段,如果發現重複。

INSERT INTO IGNORE .....可以讓你忽略新插入的行如果已經存在

既然你在,你是從文件導入記錄的評論中提到,然後嘗試使用LOAD DATA INFILE邏輯,這將讓你REPLACE場一式兩份

LOAD DATA LOCAL INFILE 'x3export.txt' 
REPLACE INTO TABLE x3export 
+0

抱歉,我不能使用替換查詢,因爲我需要插入.csv文件的值。我只是直接導入它。 – user3784251 2014-10-29 18:17:39

+0

你如何導入數據?你不能插入忽略? – Jaylen 2014-10-29 18:18:36

+0

實際上,在導入csv文件時,mysql會自動執行正常的'INSERT ...'查詢。有沒有辦法將這個自動查詢更改爲REPLACE或其他任何你上面說的 – user3784251 2014-10-29 18:20:47