假设我正在对我的一个表进行MySQL INSERT操作,该表有列item_id,它被设置为自动递增和主键。
如何让查询在同一查询中输出新生成的主键item_id的值?
目前,我正在运行第二个查询来检索id,但这似乎不是一个好的做法,考虑到这可能会产生错误的结果…
如果这是不可能的,那么什么是最佳实践,以确保我检索正确的id?
假设我正在对我的一个表进行MySQL INSERT操作,该表有列item_id,它被设置为自动递增和主键。
如何让查询在同一查询中输出新生成的主键item_id的值?
目前,我正在运行第二个查询来检索id,但这似乎不是一个好的做法,考虑到这可能会产生错误的结果…
如果这是不可能的,那么什么是最佳实践,以确保我检索正确的id?
当前回答
如果在python中使用pymysql,则可以从光标中使用cursor.lastrowid。
它是PEP-249 DB API标准中的一个文档扩展,也可以与其他Python MySQL实现一起使用。
其他回答
如果在python中使用pymysql,则可以从光标中使用cursor.lastrowid。
它是PEP-249 DB API标准中的一个文档扩展,也可以与其他Python MySQL实现一起使用。
你需要对事务使用LAST_INSERT_ID()函数:
START TRANSACTION;
INSERT INTO dog (name, created_by, updated_by) VALUES ('name', 'migration', 'migration');
SELECT LAST_INSERT_ID();
COMMIT;
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
此函数将返回表中最后插入的主键。
从LAST_INSERT_ID()文档:
生成的ID在服务器中以每个连接为基础进行维护
也就是说,如果您同时有两个独立的脚本请求,它们不会影响彼此的LAST_INSERT_ID()(除非您使用持久连接)。
简单的使用方法:
$last_id = mysqli_insert_id($conn);
如果您使用PHP:在PDO对象上,您可以简单地调用 插入后的lastInsertId方法。
否则,使用LAST_INSERT_ID可以得到这样的值:SELECT LAST_INSERT_ID();