2013-05-12 95 views
1

我在MySQL中創建了一個觸發器,並且在我的'pending_jobs'表中的'unique_id'行中得到了'未知系統變量'。觸發代碼如下:MySQL觸發器在現有行上導致未知的系統變量錯誤

CREATE TRIGGER format_pending_jobs_unique 
BEFORE INSERT ON pending_jobs 
FOR EACH ROW 
BEGIN 
    SET unique_id = CONCAT(prefix_unique_id, id); 
END 

基本上它的串聯兩行(prefix_unique_id和id)插入行UNIQUE_ID當插入一個新行。 prefix_unique_id行的默認值是「sa」,它是所有這些行的值,id是具有自動增量的行的索引。我是觸發器的新手,我已經在Stack Overflow的一篇文章中讀到使用:=而不是=,但是這並沒有解決問題。我使用phpMyAdmin並查看unique_id(以及prefix_unique_id和id)行都存在。任何幫助都會很棒。謝謝!

回答

3

我會寫你的觸發器是這樣的:

CREATE TRIGGER format_pending_jobs_unique 
BEFORE INSERT ON pending_jobs 
FOR EACH ROW 
    SET new.unique_id = 
    CONCAT(
    new.prefix_unique_id, 
    (SELECT AUTO_INCREMENT 
     FROM information_schema.TABLES 
     WHERE TABLE_SCHEMA=DATABASE() 
      AND TABLE_NAME='pending_jobs') 
    ); 

請參閱小提琴here

NEW是指要插入新行的列,所以您必須使用new.unique_idnew.prefix_unique_id。要引用該ID的新值,不能使用new.id,但需要使用返回該表的下一個auto_increment值的子查詢。

+0

似乎工作完美的小提琴。當我嘗試將它添加到phpMyAdmin中時出現錯誤:「拒絕訪問;您需要此操作的SUPER權限」...我四處尋找答案,但似乎沒有更新權限的選項。我確實可以完全訪問此網站上的後端,因此我可能會錯誤地登錄? – MillerMedia 2013-05-14 08:06:37

+0

@MxmastaMills如果你試圖運行這個查詢SELECT CHANNEL_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()AND TABLE_NAME ='pending_jobs''它返回一些東西,或者你得到一個錯誤? – fthiella 2013-05-14 19:41:52

+0

不,我沒有收到錯誤。它成功運行查詢。如果我沒有SUPER特權,我應該得到一個錯誤嗎? – MillerMedia 2013-05-17 08:32:43

相關問題