每次创建新行时更新值

时间:2013-12-08 02:37:14

标签: mysql database triggers

我有两个表:config(last_inserted_id)element(id)element表中创建新行的任何时候都有机会获取最后插入的ID 并在last_inserted_id表的config列执行更新?

我写了这个:

CREATE TRIGGER UPDATE_CONFIG_VALUES AFTER INSERT ON element
    BEGIN
        UPDATE config SET last_inserted_id = last_insert_id();
    END;
END;

是吗?如果删除element表中的行,会发生什么?该值是否应在config表中更新“我如何避免这种情况?

config表格

CREATE TABLE IF NOT EXISTS `cmplatform`.`isrl_config` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `logo_address` VARCHAR(250) NOT NULL,
  `name` VARCHAR(250) NOT NULL,
  `rif` VARCHAR(20) NOT NULL,
  `address` TEXT NOT NULL,
  `phone` VARCHAR(14) NOT NULL,
  `last_retention_number` INT NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB

2 个答案:

答案 0 :(得分:1)

测试此(未测试)

CREATE TRIGGER element_inserted_tg AFTER INSERT ON element
FOR EACH ROW
BEGIN
    DECLARE count INT;
    SELECT COUNT(1) INTO count FROM config;
    IF count == 1
        UPDATE config SET last_inserted_id = NEW.id;
    ELSE
        INSERT INTO config VALUES (NEW.id);
    END IF;
END;

CREATE TRIGGER element_deleted_tg AFTER DELETE ON element
FOR EACH ROW
BEGIN
    UPDATE config SET last_inserted_id = (SELECT MAX(id) FROM element);
END;

答案 1 :(得分:0)

触发器是执行此要求的传统方式,但不是唯一方式。另一种方法是在数据访问代码中处理它。假设您有一个DAO方法来创建新的Element,您可以获取创建的元素的id并将其更新为last_inserted_id。如果你这样做,你必须确保一次只有一个THREAD调用insert元素方法。