MySQL-insert Mysql 返回id

MySQL-insert Mysql 返回id

浮生未歇 发布于 2017-09-27 字数 204 浏览 1364 回复 7

我想批量插入,请问有办法一次性返回这次插入操作的id吗?

$sql = "INSERT INTO `votedb`.`vote_black_ip`(`blackid`,`vote_id`,`ip`,`add_time`) VALUES ( NULL,'9','9','9'),( NULL,'9','9','9')";

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

夜无邪 2017-10-19 7 楼

感觉这样处理又获取批量id的做法很矛盾啊,建议要不就循环插入依次获取id,要不就批量插入时按照上面各位大牛说的方法,根据插入条数和最后获取的id来计算每条数据的id,但是终究这样处理都不是很合理,除非是你的项目中有在这方面的瓶颈必须这样处理,如果不是,建议还是不要冒这个险了...

虐人心 2017-10-17 6 楼

针对你的这个问题,我那天去参加百度技术沙龙的时候特地问了PHP开发组成员laurence,他说mysql_insert_id()无法返回insert批量插入的所有ID,不是PHP中MySQL扩展的限制,而是MySQL把insert当成了一条语句,而insert只能返回第一条insert的ID。所以没有办法得到批量的ID,如果确实需要,还是把insert拆分成多条吧。

想挽留 2017-10-15 5 楼

我觉得既然你已获取了第一条的id,插入的条数你也是知道的,后边的你自己程序顺序加一就可以了。不过你最好还是逐条插入。

晚风撩人 2017-10-11 4 楼

我觉得你还可以在插入前取得最大Id(maxId),依次算出每个记录的Id,maxId+1,maxId+2,...maxId+n然后赋值到sql语句中即可。

灵芸 2017-10-02 3 楼

兄弟们都没考虑并发性呀,其实我真不赞成这样批量插入,尤其是还要取新增id;一般为了sql执行效率但不需要获取新增id才这样把多条insert组成批量的。如果非这样的话,我的建议是弄个临时表:

DELIMITER $$

CREATE
TRIGGER `test`.`getids` AFTER INSERT
ON `database_name`.`table_name`
FOR EACH ROW BEGIN
INSERT INTO last_inserted_ids (last_insertId) VALUES(LAST_INSERT_ID());

END$$

DELIMITER ;

在临时表里获取ids,然后再清空临时表

灵芸 2017-09-30 2 楼

mysql_insert_id()只会返回最后一次insert的自增ID号,而当批量insert的时候只会返回第一个insert的ID号,这个是PHP的MySQL扩展对mysql_insert_id()的限定。

我认为是这样的:当不需要考虑返回值是什么的时候才考虑用批量insert。如果需要对每一个语句的返回值都很重要,那建议还是把insert分开多条来指执行更为合适点。

泛泛之交 2017-09-30 1 楼

如果id是自动增长的那么,使用 mysql_insert_id(),再加上插入的条数。

$ids = range(mysql_insert_id(),mysql_insert_id()+条数 -1); $ids 就是所有插入的id。