呵呵, 你可以运行两个 mysql.exe 来建立两个连接会话 A B | INSERT INTO `tA` SET id = NULL; | 时 SELECT LAST_INSERT_ID(); INSERT INTO `tA` SET id = NULL; | 间 -> 1 | 顺 SELECT LAST_INSERT_ID(); SELECT LAST_INSERT_ID(); v 序 -> 1 -> 2
呵呵, 你可以运行两个 mysql.exe 来建立两个连接会话 A B | INSERT INTO `tA` SET id = NULL; | 时 SELECT LAST_INSERT_ID(); INSERT INTO `tA` SET id = NULL; | 间 -> 1 | 顺 SELECT LAST_INSERT_ID(); SELECT LAST_INSERT_ID(); v 序 -> 1 -> 2 A 用户先插入一个记录 查询 LAST_INSERT_ID() 返回值 1 当 A 用户查询时,B 用户也插入了一个新记录, 在 B 插入新记录后,A 查询 LAST_INSERT_ID() 还是得 1, 而 B 用户查询 LAST_INSERT_ID() 得2
当 A 用户查询时,B 用户也插入了一个新记录, 是A的动作在先还是B的? 如果同一时刻B也插入数据,我怎么觉得A查询时得到的应该是2呢。(受java同步影响) 那这个last_insert_id()有啥用呢?只是得到一个值啊?
呵呵, 按时间 A 的先,所以 A 的为1 LAST_INSERT_ID() 顾名思义就是上一条插入时的ID 它不受其它用户的影响 你可以用 MySQL 客户端试一试, 方法如上
INSERT INTO `tB` SET id = LAST_INSERT_ID();
可以查看 MySQL用户手册,
并自已试验一下,同一个连接会话在向一个自增字段里插入一个数据后,
用 LAST_INSERT_ID() 所得到的就是前一插入语句的自增值,
这个值是在服务器端维护的,
其它用户插入新数据不会影响到该连接用户使用该函数所得返回值,
你可以运行两个 mysql.exe 来建立两个连接会话 A B
| INSERT INTO `tA` SET id = NULL;
| 时 SELECT LAST_INSERT_ID(); INSERT INTO `tA` SET id = NULL;
| 间 -> 1
| 顺 SELECT LAST_INSERT_ID(); SELECT LAST_INSERT_ID();
v 序 -> 1 -> 2
你可以运行两个 mysql.exe 来建立两个连接会话 A B
| INSERT INTO `tA` SET id = NULL;
| 时 SELECT LAST_INSERT_ID(); INSERT INTO `tA` SET id = NULL;
| 间 -> 1
| 顺 SELECT LAST_INSERT_ID(); SELECT LAST_INSERT_ID();
v 序 -> 1 -> 2 A 用户先插入一个记录
查询 LAST_INSERT_ID() 返回值 1
当 A 用户查询时,B 用户也插入了一个新记录,
在 B 插入新记录后,A 查询 LAST_INSERT_ID() 还是得 1,
而 B 用户查询 LAST_INSERT_ID() 得2
是A的动作在先还是B的?
如果同一时刻B也插入数据,我怎么觉得A查询时得到的应该是2呢。(受java同步影响)
那这个last_insert_id()有啥用呢?只是得到一个值啊?
按时间 A 的先,所以 A 的为1
LAST_INSERT_ID() 顾名思义就是上一条插入时的ID
它不受其它用户的影响
你可以用 MySQL 客户端试一试,
方法如上