1、沒(méi)谷歌到php可以用的直接方法,不過(guò)可以獲取批量插入的第一個(gè)自增id
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了固原免費(fèi)建站歡迎大家使用!
2、假設(shè)批量插入的數(shù)據(jù)的自增ID是連續(xù)的,則可以通過(guò)第一個(gè)自增ID獲取所有自增ID
3、測(cè)試批量插入的數(shù)據(jù)的自增ID是否是連續(xù)的,即插入過(guò)程中,單獨(dú)插入其他數(shù)據(jù),批量插入的自增ID是否連續(xù)
4、生成批量插入10w條數(shù)據(jù)的sql
5、navicat打開(kāi)兩個(gè)頁(yè)面,一個(gè)是上面的sql,一個(gè)是一條單獨(dú)插入的sql(這條sql的test_id,要大于上面sql里隨機(jī)數(shù)的最大值,方便查看)
6、所以可以使用2中的方式獲取批量插入的所有自增ID
在MySQL中,使用auto_increment類(lèi)型的id字段作為表的主鍵,并用它作為其他表的外鍵,形成“主從表結(jié)構(gòu)”,這是數(shù)據(jù)庫(kù)設(shè)計(jì)中常見(jiàn)的用法。但是在具體生成id的時(shí)候,我們的操作順序一般是:先在主表中插入記錄,然后獲得自動(dòng)生成的id,以它為基礎(chǔ)插入從表的記錄。這里面有個(gè)困難,就是插入主表記錄后,如何獲得它對(duì)應(yīng)的id。通常的做法,是通過(guò)“select max(id) from tablename”的做法,但是顯然這種做法需要考慮并發(fā)的情況,需要在事務(wù)中對(duì)主表加以“X鎖“,待獲得max(id)的值以后,再解鎖。這種做法需要的步驟比較多,有些麻煩,而且并發(fā)性也不好。有沒(méi)有更簡(jiǎn)單的做法呢?答案之一是通過(guò)select LAST_INSERT_ID()這個(gè)操作。乍一看,它和select max(id)很象,但實(shí)際上它是線程安全的。也就是說(shuō)它是具體于數(shù)據(jù)庫(kù)連接的。下面通過(guò)實(shí)驗(yàn)說(shuō)明:
1、在連接1中向A表插入一條記錄,A表包含一個(gè)auto_increment類(lèi)型的字段。
2、在連接2中向A表再插入一條記錄。
3、結(jié)果:在連接1中執(zhí)行select LAST_INSERT_ID()得到的結(jié)果和連接2中執(zhí)行select LAST_INSERT_ID()的結(jié)果是不同的;而在兩個(gè)連接中執(zhí)行select max(id)的結(jié)果是相同的。
其實(shí)在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的區(qū)別和這里是類(lèi)似的。使用SCOPE_IDENTITY()可以獲得插入某個(gè)IDENTITY字段的當(dāng)前會(huì)話的值,而使用IDENT_CURRENT()會(huì)獲得在某個(gè)IDENTITY字段上插入的最大值,而不區(qū)分不同的會(huì)話。
注:使用select last_insert_id()時(shí)要注意,當(dāng)一次插入多條記錄時(shí),只是獲得第一次插入的id值,務(wù)必注意!可以試試
insert into tb(c1,c2) values (c1value,c2value),(c1value1,c2value2)..。
通過(guò) database.insert_id() 方法可以獲取插入數(shù)據(jù)的主鍵id, 注意一定要在commit之前獲取,否則返回0。
因?yàn)镸ySQL本身支持auto_increment操作,很自然地,我們會(huì)想到借助這個(gè)特性來(lái)實(shí)現(xiàn)這個(gè)功能。Flicker在解決全局ID生成方 案里就采用了MySQL自增長(zhǎng)ID的機(jī)制(auto_increment + replace into + MyISAM)。一個(gè)生成64位ID方案具體就是這樣的:
先創(chuàng)建單獨(dú)的數(shù)據(jù)庫(kù)(eg:ticket),然后創(chuàng)建一個(gè)表:
CREATE TABLE Tickets64 (
id bigint(20) unsigned NOT NULL auto_increment,
stub char(1) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY stub (stub)
) ENGINE=MyISAM