我有一个id列,它是AUTO_INCREMENT的主键。我需要生成的值插入id列,以及另一列(未设置为AUTO_INCREMENT,并且不是唯一的。
目前我使用mysqld_isnert_id()函数来获取id,并在插入后简单地运行更新查询,但我想知道如果不运行第二次更新查询我是否可以这样做。
答案 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命令/查询,你不能,这完全很糟糕,因为那将是一个更清洁的解决方案。