- 浏览: 250312 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (192)
- 技术研究学习 (19)
- 工作总结 (4)
- spring3.x (11)
- mail (2)
- jar (2)
- FCKeditor (1)
- quartz (2)
- json (1)
- jdbc (5)
- struts2 (6)
- java基础 (18)
- jboss (3)
- IT名称解析 (1)
- 测试工具 (2)
- 工作趣谈 (1)
- 数据库 (8)
- js (8)
- jquery (1)
- mysql (20)
- Sql (3)
- Oracle (1)
- easyui (0)
- log4j (1)
- 源码研究 (1)
- Jasper Report (0)
- Jbpm4 (4)
- xml (1)
- ireport (0)
- javavm (1)
- sitemesh (5)
- compass (1)
- jvm (1)
- ext (1)
- lucene (0)
- cxf (1)
- Blazeds (0)
- Resteasy (1)
- jaxb (1)
- tomcat (1)
- Rmi (1)
- BoneCP (1)
- velocity (3)
- OSCache (1)
- EHCache (1)
- 高性能开发 (9)
- 设计模式 (0)
- 网络协议应用 (1)
- Ibatis (1)
- powerdesigner (1)
- 架构师之路 (2)
- memcached (4)
- MapReduce (1)
- 测试组 (1)
- 图像处理 (2)
- LoadRunner (2)
- 报表 (1)
- 负载均衡 (1)
- 分布式 (3)
- c# (1)
- java中一些特殊问题 (3)
- java 8 (1)
- Mogodb (1)
- 项目设计与实现 (2)
- Ubuntu (1)
- eclipse (1)
- gradle (1)
- 私有云 (1)
- redis (1)
- 移动前端 (1)
最新评论
[color=indigo][/color]如何获取某个表中的最大序号数?一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。 但在多线程情况下,就不行了。 下面介绍三种方法 (1) getGeneratedKeys()方法: 程序片断: Connection conn = ; Serializable ret = null; PreparedStatement state = .; ResultSet rs=null; try { state.executeUpdate(); rs = state.getGeneratedKeys(); if (rs.next()) { ret = (Serializable) rs.getObject(1); } } catch (SQLException e) { } return ret; (2)LAST_INSERT_ID: LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。 在多用户交替插入数据的情况下max(id)显然不能用。 这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。 LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generated is maintained in the server on a per-connection basis. LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。 可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值. Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only. 使用单INSERT语句插入多条记录, LAST_INSERT_ID只返回插入的第一条记录产生的值.
比如 mysql> INSERT INTO t VALUES (NULL, ‘aaaa’), (NULL, ‘bbbb’), (NULL, ‘cccc’);
mysql> SELECT * FROM t; +—-+——+ | id | name | +—-+——+ | 1 | Bob | | 2 | aaaa | | 3 | bbbb | | 4 | cccc | +—-+——+
mysql> SELECT LAST_INSERT_ID(); +——————+ | LAST_INSERT_ID() | +——————+ | 2 | +——————+ ID 2 是在插入第一条记录aaaa 时产生的.
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。 一般情况下获取刚插入的数据的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。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。 (3)select @@IDENTITY: String sql=”select @@IDENTITY”; @@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
比如 mysql> INSERT INTO t VALUES (NULL, ‘aaaa’), (NULL, ‘bbbb’), (NULL, ‘cccc’);
mysql> SELECT * FROM t; +—-+——+ | id | name | +—-+——+ | 1 | Bob | | 2 | aaaa | | 3 | bbbb | | 4 | cccc | +—-+——+
mysql> SELECT LAST_INSERT_ID(); +——————+ | LAST_INSERT_ID() | +——————+ | 2 | +——————+ ID 2 是在插入第一条记录aaaa 时产生的.
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。 一般情况下获取刚插入的数据的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。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。 (3)select @@IDENTITY: String sql=”select @@IDENTITY”; @@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
发表评论
-
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
2013-08-26 13:12 956来源:http://www.cnblogs.com/luckc ... -
日志回滚,mysql优化
2012-09-25 13:40 1958原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ... -
MySQL 自增字段为何出错
2012-09-25 13:39 1226来源:http://www.zioer.com/mysql-自 ... -
mysql 执行顺序 SQL语句执行顺序分析
2012-09-21 16:48 9511来源:http://blog.sina.com.c ... -
MySQL查询中的非空问题
2012-09-21 16:52 2149MySQL查询是我们经常 ... -
Mysql字符串截取函数SUBSTRING的用法说明
2012-09-24 09:52 955来源:http://www.jb51.net/article/ ... -
Mysql点滴-CAST/CONVERT 类型转换函数
2012-09-20 11:19 910CAST() 和CONVERT() 函数可用来获取一个 ... -
mysql字符串向整型转换
2012-09-20 11:19 1140mysql字符串向整型转换 SELECT MAX(C ... -
mysql as 别名与 join 多表连接语法
2012-09-20 11:19 2398在MySQL中,使用AS关键字为字段、表、视图取别名,或者 ... -
理解MySQL——复制(Replication)
2012-09-24 09:52 859来源:http://www.cnblogs.com/hustc ... -
mysql中的begin-end流程控制语句与局部变量
2012-09-24 09:53 3732来源:http://blog.sina.com.c ... -
MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题
2012-09-24 09:52 1095MySQL中涉及的几个字符集 character- ... -
MySql 申明变量以及赋值
2012-09-25 13:40 810sql server中变量要先申明后赋值: 局部变 ... -
mysql变量使用总结
2012-09-21 16:53 878来源:http://www.cnblogs.com ... -
Mysql中文乱码问题完美解决方案
2012-09-18 14:47 634MySQL会出现中文乱码的原因不外乎下列几点: 1.se ... -
MySQL中快速插入大数据量和语句优化的相关技巧
2012-09-18 14:00 1054来源:http://it.100xuexi.com/view/ ... -
mysql中利用insert对自增字段进行插值
2012-09-18 11:34 1633[color=blue][/color]INSERT和REPL ... -
MYSQL中如何设置列默认值的介绍(时间)
2012-09-17 10:56 998来源:http://tech.it168.com/o/2006 ... -
mysql添加注释
2012-09-17 10:14 825mysql允许在sql 代码中使用注释。这对于说明存放在文件中 ...
相关推荐
在关系型数据库中,如MySQL、SQL Server或Oracle,我们可以使用内置的自动递增(Auto Increment)或序列(Sequence)功能来生成自动编号。例如,在SQL Server中,可以创建一个具有Identity属性的列,它会在每次插入...
例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql>insert into MyClass values(1,’Tom’,96.45),(2,’Joan...
2. **创建触发器--自动添加**:每当有新的订单添加时,自动将订单信息复制到镜像表中。 3. **创建触发器--自动删除**:当订单被取消或完成时,自动从镜像表中删除相应的记录。 4. **验证触发器**:通过测试订单的...
这个存储过程首先获取`users`表中当前的最大`id`,然后插入一个新的用户记录,`id`值为最大`id`加1,确保了编号的连续性。 在Java环境中,我们可以使用JDBC(Java Database Connectivity)来调用这个存储过程。以下...
MySQL的`LAST_INSERT_ID()`函数可以获取自增字段生成的最后一个编号,这对于跟踪插入操作非常有用。但是,这个函数只与当前会话相关,如果在会话中没有生成新的自增值,它将返回0。 对于其他类型的数据表,如MyISAM...
例如,向`grade`表中添加一条新的学员记录,提供`name`、`email`、`point`和`regdate`的值。`NOW()`函数用于获取当前日期和时间。 查询数据是数据库操作的核心部分。`SELECT`语句用于从表中获取信息。可以查询所有...
1. 查询北京的供应商编号、名称和城市,这可以通过SELECT语句从供应商表S中筛选出城市为"北京"的记录。 2. 查询S1供应商的所有供应明细,这意味着我们需要结合供应商表S、零件表P和供应情况表SPJ,通过JOIN操作获取...
例如,在`insect`表的创建中,`id`列被设置为自动递增,所以即使在插入记录时没有提供`id`值,MySQL也会自动生成并填充。 2. **插入数据**: 插入数据时,可以省略带有 AUTO_INCREMENT 属性的列的值。在上面的例子...
系统接收这些数据后,通过JavaEE的Servlet或JSP组件处理,将新数据插入到MySQL数据库中。 7. **修改学生信息**:当需要更新学生信息时,系统提供了编辑功能。管理员选择特定学生,修改相关信息后,系统将更新数据库...
- **插入数据**:使用`INSERT INTO`语句向表中添加数据,如创建和填充各个表的操作。 - **查询数据**:`SELECT`语句用于检索数据,可以与`FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`, `LIMIT`等子句结合...
订单编号通常是系统自动生成的唯一标识,用于区分不同的订单。以下是一些相关的知识点: 1. **订单编号生成策略**: - 顺序编号:最简单的策略是按照创建时间顺序给予订单一个递增的数字,例如"ORDER000001"。 - ...
在Oracle数据库中,我们可以使用`CREATE SEQUENCE`语句来定义一个序列,然后在插入新记录时使用`NEXTVAL`函数获取序列的下一个值。例如: ```sql CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1; ``` ...
在数据库操作中,有时我们需要在插入新记录时确保某个字段的值是当前数据库中该字段的最大值加上1,以此来实现自动序列化或保持唯一性。这种需求在诸如订单编号、ID序列等场景中十分常见。本文将详细介绍如何通过`...
- 添加学生信息(addstu函数):通过输入学生信息并执行SQL插入语句来向数据库添加新学生记录。 - 更新学生信息(updateStu函数):通过输入学生信息并执行SQL更新语句来修改数据库中已存在的学生记录。 - 删除学生...
这个触发器会在每次向`demo_1`中添加一条记录时,获取最新添加的`ID`,并将该学生的信息(ID和默认数学成绩98.5)插入到`demo_2`中。 为了实现对触发器的控制,我们可以修改触发器的逻辑,添加一个变量`@enable_...
主键是表中唯一标识每行的特殊列,例如,可以将"员工编号"设为主键,并将其设为标识列,这样每次插入新记录时,系统会自动生成唯一的编号。 在ADO.NET中,数据源连接是与数据库建立连接的重要步骤。使用Connection...
11. 在MySQL中,`AUTO_INCREMENT`属性使得id字段自动递增,即使插入特定值,后续插入仍会递增,因此“张良”的客户编号是22501。 12. 查找15天前的记录应使用表达式`()-15`,因此B选项正确。 13. 在面向对象编程中,...
- **知识点**: 在Access中,**自动编号**是一种数据类型,它用于为每个新记录自动生成唯一的数字标识符。 - **应用场景**: 通常用于为主键字段分配唯一值,确保每条记录都有一个唯一的标识符。 - **特点**: 自动编号...