重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用SELECT LAST_INSERT_ID() 取得,但是需要保证LAST_INSERT_ID和插入操作在同一个session
肥城网站建设公司创新互联,肥城网站设计制作,有大型网站制作公司丰富经验。已为肥城1000多家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的肥城做网站的公司定做!
在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中常见的用法。但是在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从表的记录。这里面有个困难,就是插入主表记录后,如何获得它对应的id。通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况,需要在事务中对主表加以“X锁“,待获得max(id)的值以后,再解锁。这种做法需要的步骤比较多,有些麻烦,而且并发性也不好。有没有更简单的做法呢?答案之一是通过select LAST_INSERT_ID()这个操作。乍一看,它和select max(id)很象,但实际上它是线程安全的。也就是说它是具体于数据库连接的。下面通过实验说明:
1、在连接1中向A表插入一条记录,A表包含一个auto_increment类型的字段。
2、在连接2中向A表再插入一条记录。
3、结果:在连接1中执行select LAST_INSERT_ID()得到的结果和连接2中执行select LAST_INSERT_ID()的结果是不同的;而在两个连接中执行select max(id)的结果是相同的。
其实在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的区别和这里是类似的。使用SCOPE_IDENTITY()可以获得插入某个IDENTITY字段的当前会话的值,而使用IDENT_CURRENT()会获得在某个IDENTITY字段上插入的最大值,而不区分不同的会话。
注:使用select last_insert_id()时要注意,当一次插入多条记录时,只是获得第一次插入的id值,务必注意!可以试试
insert into tb(c1,c2) values (c1value,c2value),(c1value1,c2value2)..。
Navicat for MySQL 11 激活码-序列号-注册码:
NUYJ-W56S-3YUU-MVHV
NHU6-FSTR-36YT-JBTQ
VHSY-SFGH-BGTY-9OIU
OPJH-WUJH-RT6U-MTGB
QRTG-S56S-7YYZ-ZADE
FGTY-4RTY-POQR-BNSS
BJNK-DERT-3ZAQ-JTYY
56HY-CFG6-ASDF-VBZX
CVFR-7UJK-FF6U-BHJK
GLP0-MKLO-CVGY-HYUK
以上是目前网上能找到的Navicat for MySQL 11版本的注册码,如果不可以的话,建议到官方授权。授权地址:
添加记录的时候返回的是被插入数据的主键id,
需要的日期序列号要查询一下
select date_format(时间字段,'%Y%m%d%H%i%s') as ‘日期序列号’ from 表名;