我有两个表: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
答案 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元素方法。