2011-10-09 52 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'触发器。