如何将从AUTO_INCREMENT派生的值插入到同一INSERT查询中的另一列?

时间:2009-09-06 18:44:24

标签: mysql

我有一个id列,它是AUTO_INCREMENT的主键。我需要生成的值插入id列,以及另一列(未设置为AUTO_INCREMENT,并且不是唯一的。

目前我使用mysqld_isnert_id()函数来获取id,并在插入后简单地运行更新查询,但我想知道如果不运行第二次更新查询我是否可以这样做。

4 个答案:

答案 0 :(得分:1)

插入触发后

答案 1 :(得分:0)

如果我没记错的话,直到执行插入后才会创建自动生成的ID。你的两种查询方式可能是唯一的方法,而不是潜入一个存储过程。

答案 2 :(得分:0)

您可以按以下方式定义触发器:

delimiter //
CREATE TRIGGER upd_check AFTER INSERT ON mainTable
FOR EACH ROW
BEGIN
  UPDATE dependingTable 
  SET dependingTable.column = NEW.id
END;//
delimiter ;

我不确定何时生成AUTO_INCREMENT值,但您可以尝试以下操作,因为如果它有效,它将为您保存更新(如果您希望将值复制到的列与插入行):

CREATE TRIGGER upd_check BEFORE INSERT ON mainTable
FOR EACH ROW 
SET NEW.column = NEW.id

答案 3 :(得分:0)

我可以看到你使用单个查询执行此操作的唯一方法是使用信息架构。在信息模式中有一个名为“tables”的表,您可以在其中访问auto_increment列。那个包含该表的NEXT插入ID,你可以通过嵌套选择访问它,只需给用户连接数据库读取访问该表。这只适用于innodb引擎,据我所知,填充第二个id字段的嵌套选择将成为插入的更大事务的一部分。

这就是您的查询的样子:

INSERT INTO fooTable VALUES (0, (SELECT AUTO_INCREMENT FROM information_schema.TABLES));

此外,如果您担心读访问和安全问题,请记住这是通过运行show table status可以获得的相同信息。说到这一点,我试图看看你是否可以通过选择投影show命令/查询,你不能,这完全很糟糕,因为那将是一个更清洁的解决方案。