2013-10-29 28 views
0

我有兩個表格:threadsthreadreply觸發一個堆肥密鑰並更新另一列

threads有一個複合主鍵(thread_id,reply_id)

當我插入新行到threadreply,我需要:

  • 更新加入+1到以前的值我的專欄threads.reply_count;和

  • 通過向MAX(reply_id)加上+1來將數據插入到threadreply中,同時thread_id

使用下面的扳機,我是能夠增加+ 1我reply_id,但不能得到更新我reply_count

CREATE TRIGGER addone BEFORE INSERT ON threadreply 
FOR EACH ROW BEGIN 
    SET NEW.reply_id = (
     SELECT IFNULL(
      (
       SELECT MAX(reply_id) + 1 
       FROM threadreply 
       WHERE thread_id = NEW.thread_id 
      ), 
      1 
     ) 
    ); 
END 

我怎樣才能解決這個問題?

+0

innoDB並感謝您的問題編輯。 – Sudheer

+0

如果你想更新,那麼需要一些更新命令。你有沒有嘗試過'更新線程SET reply_count = reply_count +1 WHERE threads.id = NEW.thread_id'? – krokodilko

+0

@kordirko ya單獨這兩個語句的工作,但我無法讓這兩個語句在同一個觸發器中工作。 – Sudheer

回答

1

我假設在問題中存在拼寫錯誤,並且threadreply表中存在複合鍵(thread_id,reply_id),而不是在threads表中存在。

觸發可能看起來像:

CREATE TRIGGER addone BEFORE INSERT ON threadreply 
FOR EACH ROW BEGIN 
    SET NEW.reply_id = (
     SELECT IFNULL(
      (
       SELECT MAX(reply_id) + 1 
       FROM threadreply 
       WHERE thread_id = NEW.thread_id 
      ), 1 
     ) 
    ); 
    UPDATE threads SET reply_count = reply_count + 1 
    WHERE thread_id = NEW.thread_id; 
END 
/

在這個演示看看: - >http://www.sqlfiddle.com/#!2/1e7bb/2

觸發和insert語句都在左側的窗口schema,如下所示演示結果。

相關問題