0

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

从生产

    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());

从测试

    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 用于 MySQL,如果有人能解释为什么会发生这种情况或以某种方式注意到代码的不同之处,我将不胜感激。

4

1 回答 1

0

那可能是因为你没有在表中设置NULL = YESCREATED_DATE声明CREATED_DATE可能是nullLIBRARY_RECORD

但是当你插入 LIBRARY_RECORD时,你没有插入CREATED_DATE

您应该插入 CREATED_DATE 或允许CREATED_DATE具有NULL价值。

于 2013-03-18T06:00:35.840 回答