【问题标题】:Mysql insert trigger doesn't workMysql插入触发器不起作用
【发布时间】:2016-03-05 08:26:15
【问题描述】:

您能帮我解决以下问题吗? 当我尝试在 Mysql 5.5 中创建以下触发器时出现错误 触发器如下:

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;

实际上触发器应该执行以下操作。它应该以自动方式将 +7 天插入 date_supposed_taken 列

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    参考文档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;//
    

    【讨论】:

      【解决方案2】:

      你需要在CREATE之前定义不同的分隔符,DROP TRIGGER而不是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
      

      【讨论】:

        猜你喜欢
        • 2013-02-08
        • 2013-05-20
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        相关资源
        最近更新 更多