触发器的副本不起作用

时间:2013-01-30 15:38:55

标签: mysql

我通过生产和使用mysqldump创建了一个单独的测试数据库。当我通过复制和粘贴代码重新创建触发器时,它们无法在测试数据库上工作。 TOAD抛出'CREATED_DATE没有默认值'错误。所以我回到生产并测试了触发器,它按预期工作。触发器的目标是设置日期字段的默认值,共有2个,它是您所看到的变体。

FROM PRODUCTION

    CREATE DEFINER=`root`@`%` TRIGGER `iwebprod`.`CREATED_DATE` BEFORE INSERT ON iwebprod.library_record FOR EACH ROW
    SET NEW.CREATED_DATE = IFNULL(NEW.CREATED_DATE, NOW());

FROM TEST

    CREATE DEFINER=`root`@`%` TRIGGER `iwebprod`.`CREATED_DATE` BEFORE INSERT ON iwebprod.library_record FOR EACH ROW
    SET NEW.CREATED_DATE = IFNULL(NEW.CREATED_DATE, NOW());

问题中的DML

INSERT INTO LIBRARY_RECORD(LIBRARY_RECORD_ID, NAME, DESCRIPTION, SOURCE, ATTACHMENT_ONLY, CONTENT_TYPE_ID, INTRANET_DISPLAY,
              INTERNET_DISPLAY, ACTIVE_DATE, ARCHIVE_DATE)
VALUES ('5895', 'moowcow', 'rbgsb', 'library/oracle2mysql.exe', '0', '23', '1', '0', '30-Jan-2013', '31-Jan-2013')

我使用TOAD for MySQL,如果有人能够解释为什么会发生这种情况或以某种方式注意到代码的不同之处,我会很感激。

1 个答案:

答案 0 :(得分:0)

这可能是因为您没有NULL = YES设置CREATED_DATE(声明CREATED_DATE可能是null){ {1}}表

但是当您插入 LIBRARY_RECORD时,您没有插入LIBRARY_RECORD

你应插入 CREATED_DATE 或允许CREATED_DATE拥有CREATED_DATE值。