- 浏览: 429531 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (269)
- 原创 (7)
- Java (51)
- Java Concurrency (2)
- IDE (16)
- Linux (46)
- Database (23)
- NoSQL (35)
- Web服务器 (23)
- Log日志 (11)
- HTTP (11)
- HTML (2)
- XML (1)
- Test (7)
- Mina (0)
- Amoeba (4)
- Cobar (1)
- 序列化 (2)
- Python (5)
- PHP (1)
- Socket通信 (1)
- Network (3)
- Struts (2)
- Web前端 (10)
- Maven (6)
- SVN (15)
- Json (1)
- XMPP (2)
- Go (1)
- Other (4)
- 未整理 (5)
最新评论
-
u012374672:
[color=darkred][/color][flash=2 ...
Mongo的ORM框架的学习Morphia(annotations) -
b_l_east:
很有问题啊
利用redis的transaction功能,实现分布式下加锁
LAST_INSERT_ID() 自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的第一个表发生的值。
MySQL 的LAST_INSERT_ID 的注意事项:
第一 、查询和插入所使用的Connection对象必须是同一个才可以,否则返回值是不可预料的。
mysql> SELECT LAST_INSERT_ID();
-> 100
使用这函数向一个给定Connection对象返回的值是该Connection对象产生对影响AUTO_INCREMENT列的最新语句第一个AUTO_INCREMENT值的。这个值不能被其它Connection对象的影响,即它们产生它们自己的AUTO_INCREMENT值。
第二 、LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。
第三 、 假如你使用一条INSERT语句插入多个行, LAST_INSERT_ID() 只返回插入的第一行数据时产生的值。其原因是这使依靠其它服务器复制同样的 INSERT语句变得简单。
mysql> INSERT INTO t VALUES
-> (NULL, ‘Mary’), (NULL, ‘Jane’), (NULL, ‘Lisa’);
mysql> SELECT * FROM t;
| id | name |
+—-+——+
| 1 | Bob |
| 2 | Mary |
| 3 | Jane |
| 4 | Lisa |
mysql> SELECT LAST_INSERT_ID(); //这就是我要说明的关键问题。
| LAST_INSERT_ID() |
| 2 |
虽然将3 个新行插入 t, 对这些行的第一行产生的 ID 为 2, 这也是 LAST_INSERT_ID()返回的值。
第四 、假如你使用 INSERT IGNORE而记录被忽略,则AUTO_INCREMENT 计数器不会增量,而 LAST_INSERT_ID() 返回0, 这反映出没有插入任何记录。
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。
发表评论
-
windows安装mysql-8.0压缩版详细教程
2019-04-17 20:15 688〇、准备: MySQL8.0.15 Windows zip ... -
windows安装mysql-5.7压缩版详细教程
2018-03-28 16:22 9101.把压缩包解压到你喜欢的位置 本示例解压到:D: ... -
Percona XtraBackup 安装介绍篇
2018-01-12 17:52 1697XtraBackup介绍 XtraBack ... -
mysql 6.x 驱动使用 mysql-connector-java 6.x
2017-08-29 14:00 2054一. 升级mysql-connector-java.6.0 ... -
mysql存储过程中用变量做表名
2015-07-08 11:19 6848mysql存储过程中用变量做表名 1.用变量做表名 ... -
This function has none of DETERMINISTIC, NO SQL解决办法
2014-12-23 11:51 804This function has none of DETE ... -
MariaDB在Linux平台下安装与配置
2014-12-20 22:09 2307MariaDB数据库主要支持的Linux版 ... -
单机启动多个mysql
2014-11-24 15:55 8701.单机启动多个mysql的 ... -
MySQL 5.6 for Windows 解压缩版配置安装
2014-11-23 22:04 650MySQL是一个小巧玲珑但功能强大的数据库, ... -
MariaDB配置文件my.cnf
2014-11-14 14:07 12777# MariaDB database server conf ... -
MySQL utf8mb4 字符集:支持 emoji 表情符号
2014-11-05 09:36 1967㈠ 序言 为了应对无线互联网的机遇和挑战、避免 emoj ... -
Mysql常用命令
2014-11-04 17:15 62501:service mysql status 02:s ... -
Mysql版本查看
2014-11-04 14:38 802root@station7 ~]# mysql -V my ... -
Mysql日期函数,时间函数使用的总结
2014-10-20 15:37 681一、MySQL 获得当前日期时间 函数 1.1 获得当前日期+ ... -
MySQL导入sql文件
2014-09-17 13:44 1227mysql -uroot -proot show data ... -
oracle 终端乱码
2014-05-23 14:53 1074关于终端乱码问题,网上的信息一直很混乱,我 ... -
plsql工具比较用户对象
2014-05-19 15:42 1057PLSQL-TOOLS-COMPARE USER O ... -
oracle中exp,imp的使用详解
2014-04-11 15:54 708基本语法和实例: 1、EXP: 有三种主 ... -
Oracle 11g必须开启的服务及服务详细介绍
2014-04-07 20:40 984成功安装Oracle 11g数据库后,你会发现自己电脑运 ... -
win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
2013-01-24 19:52 8371)安装Oracle 11g 64位 2)安装32位的Ora ...
相关推荐
在MySQL数据库中,LAST_INSERT_ID()函数是一个非常实用的工具,尤其在处理多表关联或者需要获取最新插入记录的自增ID时。该函数的主要作用是返回最近一次执行的INSERT或UPDATE语句对具有AUTO_INCREMENT属性的列所...
MySQL数据库管理系统中,LAST_INSERT_ID() 函数和 mysql_insert_id() 函数都可以用来获取最近一次INSERT操作生成的自增ID值。在PHP开发中,正确地使用这两个函数对于确保数据一致性及避免并发问题至关重要。本知识...
标题提到的"MYSQL 小技巧 — LAST_INSERT_ID"着重讨论了MySQL中获取自增ID的两种方法:`LAST_INSERT_ID()`和`mysql_insert_id()`的区别以及它们在不同情况下的适用性。 首先,`LAST_INSERT_ID()`函数是MySQL提供的...
为了解决这个问题,我们可以利用MySQL的`LAST_INSERT_ID()`函数来生成并追踪各分表的唯一ID。 首先,我们需要创建一个单独的表,例如`ticket_mutex`,用于存储不同业务的ID值。这个表包含两个字段:`name`用于标识...
总结一下,`LAST_INSERT_ID()`是MySQL提供的一种方便的方法,用于获取最近一次插入操作自动生成的ID,尤其是在处理自动增长主键时。理解它的行为对于优化数据库操作和避免潜在的逻辑错误至关重要。在使用时,要注意...
当遇到`bigint`类型的ID时,可以使用MySQL的内置函数`LAST_INSERT_ID()`来解决`mysql_insert_id()`的问题,如下所示: ```php $result = mysql_query("SELECT LAST_INSERT_ID()", $link); ``` `LAST_INSERT_ID...
在某些数据库系统中,可以通过内置的函数来实现这一点,而在MySQL中,我们可以使用`LAST_INSERT_ID()`函数来达到目的。`LAST_INSERT_ID()`函数返回的是最后通过`INSERT`语句产生的`AUTO_INCREMENT`值。为了确保正确...
下面是一个简单的示例,演示了如何使用`mysql_insert_id()`获取新插入记录的ID: ```php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $db_...
总结来说,`LAST_INSERT_ID()`和`@@IDENTITY`是两种用于获取新插入数据ID的方法,它们分别适用于MySQL和SQL Server。在设计和编写数据库操作的代码时,理解这些函数的工作原理以及它们在并发环境中的行为是非常重要...
query = ("INSERT INTO employees (first_name, last_name) VALUES (%s, %s)") cursor.executemany(query, data) ``` 对于文件`www.pudn.com.txt`和`cihui_python_mySQL`,它们可能是包含SQL语句或数据库相关示例的...
- 如果你的应用环境中允许使用`LAST_INSERT_ID()`函数,可以通过执行如下SQL语句来获取最后插入记录的ID。 ```java Statement stmt = connection.createStatement(); stmt.executeUpdate("INSERT INTO test_...
Java获取新insert数据自增id的实现方法 Java获取新insert数据自增id的...这两种方法都可以解决获取新insert数据自增id的问题,而select LAST_INSERT_ID()方法更加简洁,使用Statement的getGeneratedKeys方法更方便。
创建一个只含有自增ID字段的表,如`test`,使用MyISAM引擎(因为它对`LAST_INSERT_ID()`支持更好)。通过`UPDATE`语句将ID设置为其自身的值加1,然后使用`SELECT LAST_INSERT_ID();`获取新生成的ID。`LAST_INSERT_...
一种可能的解决方案是使用`LAST_INSERT_ID()`函数配合`SELECT...FOR UPDATE`语句。当多个并发线程尝试获取新的ID时,每个线程都会锁定表中的特定行,然后通过`LAST_INSERT_ID()`获取当前的ID并增加它。这样可以确保...
- **用法:** 可以直接在查询语句中使用`LAST_INSERT_ID()`来获取自增ID。 - **示例:** 假设执行了一次插入操作后,可以使用如下SQL语句获取自增ID: ```sql SELECT LAST_INSERT_ID(); ``` 4. **...
SELECT LAST_INSERT_ID();这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因.idgo服务正确性和高可用保障措施1. 压力测试结果压测环境...