2011-10-09 67 views
0

任何想法如何讓test_trigger工作?MySQL 5更新觸發器不工作後

Create table test (
    book_id Int UNSIGNED NOT NULL, 
    book_views Int UNSIGNED NOT NULL DEFAULT 0, 
Primary Key (book_id)) ENGINE = InnoDB; 

Create table trigger_test (
    book_id Int UNSIGNED NOT NULL, 
    book_views Int UNSIGNED NOT NULL DEFAULT 0, 
Primary Key (book_id)) ENGINE = Memory; 

delimiter $$ 
CREATE TRIGGER test_trigger 
    AFTER UPDATE ON test 
    FOR EACH ROW 
    BEGIN 
    DECLARE rows_count INT; 
    SELECT count(1) FROM trigger_test WHERE book_id=NEW.book_id INTO @rows_count; 

    IF @rows_count = 0 THEN 
     INSERT INTO trigger_test(book_id, book_views) 
     SELECT book_id, book_views FROM test where book_id = NEW.book_id; 
    ELSE 
     UPDATE trigger_test 
     SET book_views = NEW.book_views 
     WHERE book_id = NEW.book_id; 
    END IF; 
    END$$ 
delimiter ; 

插入/更新不起作用。以下代碼應該在trigger_test中插入行,但不插入行。

insert into test values (1, 10); 
+0

它不插入/更新記錄。 – Maximus

回答

1

有沒有必要引用表'測試'。只需使用這樣的新表

INSERT INTO trigger_test(book_id,book_views) 
VALUES (NEW.book_id,NEW.book_views); 

您也可以使用替換語句。

MySQL Replace Syntax

更換作品酷似INSERT,不同之處在於,如果一個老行的表具有相同的值作爲一個主鍵或唯一索引的新行,舊的行之前被刪除新行被插入。

+0

你可以用一個簡單的選擇來測試它。 'SELECT'觸發器被調用'; ' –

+0

感謝您的替換! – Maximus

0

該觸發器是'AFTER UPDATE'觸發器... 它將不會在INSERT語句後執行。

您正在尋找的是更有可能在表測試中使用'AFTER INSERT'觸發器。