2016-03-05 142 views
0

你能不能幫我在下面: 有當我試圖在MySQL 5.5 觸發創建以下觸發一個錯誤是:Mysql的INSERT觸發器不起作用

CREATE OR REPLACE TRIGGER bookTakenDate 
AFTER INSERT ON readers_books 
for each row 
begin 
    update readers_books 
    set date_supposed_taken = new.date_given 
    where given_book_id = new.given_book_id; 
end; 

錯誤如下:

SQL(1064):在SQL語法中存在錯誤;在1號線

表的結構如下:

CREATE TABLE IF NOT EXISTS readers_books (
    GIVEN_BOOK_ID int(11) NOT NULL AUTO_INCREMENT, 
    books_ID int(11) DEFAULT NULL, 
    readers_ID int(11) DEFAULT NULL, 
    date_given date DEFAULT NULL, 
    date_supposed_taken date DEFAULT NULL, 
    PRIMARY KEY (GIVEN_BOOK_ID), 
    KEY books_ID (books_ID), 
    KEY readers_ID (readers_ID), 
    CONSTRAINT readers_books_ibfk_1 FOREIGN KEY (books_ID) REFERENCES BOOKS (ID), 
    CONSTRAINT readers_books_ibfk_2 FOREIGN KEY (readers_ID) REFERENCES READERS (ID) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

實際上觸發應該做的folloiwing。它應該以自動方式將日期+7天插入到date_supposed_taken列中

回答

0

回到文檔https://dev.mysql.com/doc/refman/5.5/en/create-trigger.html它看起來像不支持「CREATE OR REPLACE」語法。

它應該工作

delimiter // 
CREATE TRIGGER bookTakenDate 
AFTER INSERT ON readers_books 
for each row 
begin 
update readers_books 
set date_supposed_taken = new.date_given 
where given_book_id = new.given_book_id; 
end;// 
0

您需要定義不同的分隔符,並DROP TRIGGERCREATE代替CREATE OR REPLACE不工作了。

DELIMITER $$ -- change delimiter 

DROP TRIGGER /*!50032 IF EXISTS */ `bookTakenDate`$$ 

CREATE TRIGGER bookTakenDate 
AFTER INSERT ON readers_books 
FOR EACH ROW 
BEGIN 
    UPDATE readers_books 
    SET date_supposed_taken = new.date_given 
    WHERE given_book_id = new.given_book_id; 

END;$$ 

DELIMITER ; -- set original delimiter