我在MYSQL中有2个具有相似列的表。我使用INSERT INTO table2 SELECT * FROM table1 WHERE column1=smth
将数据从一个复制到另一个。我有不同的列作为自动增量和表中的KEY。当我使用mysqli_insert_id
时,我得到第一个而不是最后一个插入。有没有办法得到最后一个?
由于
答案 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 table2
或SELECT max(id) FROM table2 Where column1=smth
。但是......再次,根据您的密钥和此插件被击中的次数,这可能会有风险。