INSERT INTO表SELECT没有给出正确的last_id

时间:2016-06-13 14:32:30

标签: php mysql

我在MYSQL中有2个具有相似列的表。我使用INSERT INTO table2 SELECT * FROM table1 WHERE column1=smth将数据从一个复制到另一个。我有不同的列作为自动增量和表中的KEY。当我使用mysqli_insert_id时,我得到第一个而不是最后一个插入。有没有办法得到最后一个?

由于

1 个答案:

答案 0 :(得分:2)

关系数据库中没有数据的继承顺序。您必须通过以下方式指定您希望订购的字段:

INSERT INTO table2 
SELECT * 
FROM table1 
WHERE column1=smth 
ORDER BY <field to sort by here> 
LIMIT 1;

依赖于将记录写入表的顺序是一个非常糟糕的主意。如果id上有自动编号table1,则只需使用ORDER BY id DESC LIMIT 1按ID降序对结果集进行排序,然后选择最后一个。

更新以解决OP关于mysqli_insert_id

的问题

根据Mysql引用,这里调用的函数是last_insert_id(),其中声明:

  

重要如果使用单个INSERT语句插入多行,   LAST_INSERT_ID()返回为第一个插入生成的值   只排。这样做的原因是可以重现   与其他服务器轻松相同的INSERT语句。

不幸的是,您必须进行第二次查询才能获得真正的“上次插入ID”。您最好的选择可能是运行SELECT COUNT(*) FROM table1 WHERE column1=smth;,然后使用count(*)返回来添加mysqli_insert_id值。这不是很好,但如果你的音量很高,这个功能会受到很大影响,这可能是最安全的路线。

安全性较低的路线为SELECT max(id) FROM table2SELECT max(id) FROM table2 Where column1=smth。但是......再次,根据您的密钥和此插件被击中的次数,这可能会有风险。