Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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 如何在同一个insert查询中将从AUTO_INCREMENT派生的值插入到另一列中?_Mysql - Fatal编程技术网

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

Mysql 如何在同一个insert查询中将从AUTO_INCREMENT派生的值插入到另一列中?,mysql,Mysql,我有一个id列,它是自动递增的主键。我需要将生成的值插入id列以及另一列(未设置为AUTO_INCREMENT,并且不是唯一的) 目前我使用mysqld_isnert_id()函数获取id,并在插入后简单地运行更新查询,但我想知道是否可以在不运行第二次更新查询的情况下执行此操作。如果我没有记错,则在执行插入后,甚至不会创建自动生成的id。您的两种查询方式可能是唯一一种不需要深入到存储过程。在插入触发器之后?您可以按照以下行定义触发器: delimiter // CREATE TRIGGER up

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


目前我使用mysqld_isnert_id()函数获取id,并在插入后简单地运行更新查询,但我想知道是否可以在不运行第二次更新查询的情况下执行此操作。

如果我没有记错,则在执行插入后,甚至不会创建自动生成的id。您的两种查询方式可能是唯一一种不需要深入到存储过程。

在插入触发器之后?

您可以按照以下行定义触发器:

delimiter //
CREATE TRIGGER upd_check AFTER INSERT ON mainTable
FOR EACH ROW
BEGIN
  UPDATE dependingTable 
  SET dependingTable.column = NEW.id
END;//
delimiter ;
我不确定自动增量值是何时生成的,但您可以尝试以下方法,因为如果它起作用,它将为您保存一个更新(如果您希望复制该值的列与插入的行位于同一行中):


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

您的查询可能就是这样的:

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

另外,如果您担心读访问和安全问题,请记住,这与运行show table status可以获得的信息相同。说到这一点,我试图看看您是否可以通过select来投影show命令/查询,但您不能,这太糟糕了,因为这是一个更干净的解决方案。

我试过一次我和我自己没有找到解决方案。祝你好运!这仍然是两个查询,但只是模糊了。注意到了,但必须插入行才能将其作为生成的id。因此,看起来我们需要两个步骤,而不是一个。不正确,你可以获得下一个id,这只是知道它位于何处的问题。
INSERT INTO fooTable VALUES (0, (SELECT AUTO_INCREMENT FROM information_schema.TABLES));