【问题标题】:Set default value of field to auto_increment value将字段的默认值设置为 auto_increment 值
【发布时间】:2014-05-29 18:59:58
【问题描述】:

我有一个表,其中有一个自动递增列 id 和另一列 ord

我的目标是为ord 设置一个“默认”值,即id。我正在使用触发器(见下文),但它始终使用 0 而不是 id 值。

当我从 id 中删除 auto_increment 时,它可以正常工作。 如何将字段的“默认”值设置为 auto_increment 字段之一?

表格

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ord` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

触发器

CREATE TRIGGER `ord_ai` BEFORE INSERT ON `mytable`
 FOR EACH ROW IF NEW.ord IS NULL THEN
    SET NEW.ord := NEW.id;
END IF

【问题讨论】:

    标签: mysql sql triggers default-value


    【解决方案1】:

    INFORMATION_SCHMEA.TABLES 中读取id 字段的下一个AUTO_INCREMENT 值并将其用于ord 字段。

    delimiter //
    
    drop trigger if exists ord_ai //
    
    CREATE TRIGGER `ord_ai` BEFORE INSERT ON `mytable`
    FOR EACH ROW 
    BEGIN
      IF NEW.ord IS NULL THEN
        SET NEW.ord := ( SELECT AUTO_INCREMENT 
                           FROM INFORMATION_SCHEMA.TABLES
                          WHERE TABLE_NAME = 'mytable'
                            AND TABLE_SCHEMA = DATABASE() );
      END IF;
    END;
    //
    
    delimiter ;
    

    【讨论】:

    • 谢谢,这工作得很好。但是为什么id 在我的代码中为零?另外,为什么LAST_INSERT_ID() 不起作用?
    • LAST_INSERT_ID() 仅在插入完成后有效。它在before insert 触发器中不可用。
    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多