Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 每次创建新行时更新值_Mysql_Database_Triggers - Fatal编程技术网

Mysql 每次创建新行时更新值

Mysql 每次创建新行时更新值,mysql,database,triggers,Mysql,Database,Triggers,我有两个表:config(last\u inserted\u id)和element(id)在element表中创建新行并在config表的last\u inserted\u id列中执行更新时,是否有机会获得上次插入的id 我写过这样的话: CREATE TRIGGER UPDATE_CONFIG_VALUES AFTER INSERT ON element BEGIN UPDATE config SET last_inserted_id = last_insert_i

我有两个表:
config(last\u inserted\u id)
element(id)
element
表中创建新行并在
config
表的
last\u inserted\u id
列中执行更新时,是否有机会获得上次插入的id

我写过这样的话:

CREATE TRIGGER UPDATE_CONFIG_VALUES AFTER INSERT ON element
    BEGIN
        UPDATE config SET last_inserted_id = last_insert_id();
    END;
END;
是这样吗?如果删除
元素
表中的一行,会发生什么情况?是否应在
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

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

测试该方法(未测试)


我知道我可以在代码级别完成这项工作,但我不把责任交给代码,而是我想在DB上执行这项工作,所以这就是我要找的,触发器是你的方式。我想是的。触发器是我的方式,但我不知道如何做,我在这里请求一些帮助测试我的新解决方案。如果table
config
没有,则无法工作t值,这个或表的任何解决方案都需要至少有一行?非常简单。在BEGIN…END中。编写一些代码来检查配置中是否存在行。如果是,则处理更新,否则处理插入。嗯,我不是MySQL专家。你能将此添加到你的答案中吗?我不知道配置表的设计。我假设它有一列,并且它是s 1行存储上次插入的元素id。检查更新版本。请参阅更新后的
1
是否应更改?我收到错误#1064将尝试从phpMyAdmin更新触发器
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;