2016-03-05 67 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