【转载】在mysql中获取insert插入数据的id的方法SELECT LAST_INSERT_ID();
来源:互联网 发布:mac 命令行创建文件夹 编辑:程序博客网 时间:2024/05/30 04:25
SELECT LAST_INSERT_ID();
我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数,或者刚插入的数据的ID值。
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程,高并发的情况下,就不行了。
开始的时候我想的是使用mysql_insert_id(),不知道会不会在并发的时候产生影响,查询了下手册,也是才发现,是根据connection来的,不同用户间不会产生影响。所以也不用去想先把表锁起来,插入取得ID值后再解锁。直接正常插入,然后取值,即可。
int mysql_insert_id ([ resource $link_identifier ] )
mysql_insert_id()返回给定的 link_identifier中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。
如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id()返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。
warning: mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id()的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id()返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
此外,还可以通过QUERY两个SQL语句来执行:
1
--1 ,查询 LAST_INSERT_ID()
2
mysql>
select
LAST_INSERT_ID();
3
+
------------------+
4
| LAST_INSERT_ID() |
5
+
------------------+
6
| 4 |
7
+
------------------+
8
1 row
in
set
(0.00 sec)
9
10
--2 查询 @@IDENTITY
11
mysql>
select
@@IDENTITY;
12
+
------------+
13
| @@IDENTITY |
14
+
------------+
15
| 4 |
16
+
------------+
17
1 row
in
set
(0.00 sec)
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。如果后边需要a表的ID值,需要先手动存起来。
LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回受影响的第一行的ID值。
1
--最大ID值已经为4,这时候用一条sql插入两条数据。然后获取LAST_INSERT_ID().
2
insert
test(test_name,test_address)
values
(
'111'
,
'222'
),(
'1111'
,
'2222'
);
3
mysql>
select
LAST_INSERT_ID();
4
+
------------------+
5
| LAST_INSERT_ID() |
6
+
------------------+
7
| 5 |
8
+
------------------+
@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
- 【转载】在mysql中获取insert插入数据的id的方法SELECT LAST_INSERT_ID();
- MySQL使用LAST_INSERT_ID()获取新插入记录的ID
- mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
- MySQL中获取最后插入的自增ID值 LAST_INSERT_ID
- mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
- mybatis的insert元素属性详解 及 在insert插入数据获取主键id的值
- mybatis的insert元素属性详解 及 在insert插入数据获取主键id的值
- mysql insert一条记录(事务提交之前)怎样返回创建记录的主键id,last_insert_id(),selectkey && <select> 标签属性
- mysql获得刚插入数据的ID方法--转载
- Hibernate JPA中insert插入数据后自动执行select last_insert_id()解决方法
- ASP 获取 ACCESS 中新插入数据的 ID 或多个ID /Getting last insert ID/ By Stabx
- 使用mybatis的insert语句插入数据的时候,获取插入数据的主键id
- [原创,转载请注明来源]android中sqlite数据库的中文数据的插入(insert)和查询(select)
- mysql insert into select插入表中的数据与select的数据不一样
- mysql中last_insert_id()的用法
- MYSQL读取中文正常插入乱码(?)的解决和在DOS下insert,select中文的方法
- mysql获取insert之后的id
- C#操作mysql数据库事务以及获取插入数据ID的方法
- 为什么要加锁?行锁、读锁(共享锁)、写锁(排它锁)
- web服务器最大连接数
- 用户并发浏览服务器生成进程数
- Web服务器的工作原理与安全防护策略
- PHP运行模式(cgi,fast-cgi,cli,web模块模式)
- 【转载】在mysql中获取insert插入数据的id的方法SELECT LAST_INSERT_ID();
- eclipse debug快捷键
- mysql存储过程
- mysql insert中文乱码无法插入ERROR 1366 (HY000): Incorrect string value: \'\\xB1\\
- sh 错误declare not found(echo -e输出了)
- shell中整段注释代码
- shell比较大小数值字符串
- linux bc命令
- C# Socket 监听程序:IllusiveServer