`
tellixu
  • 浏览: 66799 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

自动增长列在开发中应用

阅读更多
   数据库开发中,如果有主表T1,子表T2的情况下,假设T1中的主键是自动增长的,有很多时候需要在同一个事务中对T1进行插入操作的同时,对T2进行插入操作,这是需要T1的自动增长列,美美遇到此时都感觉非常麻烦。比如MySQL中有表:

CREATE TABLE `test` (

  `tid` int(4) NOT NULL auto_increment,

  `tnamve` varchar(20) default NULL,

  PRIMARY KEY  (`tid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如何在插入的同时获取到自动增长列的值呢?

 

JDBC3.0中有相关的实现。

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/test";

    Connection conn=DriverManager.getConnection(url,"root","root");

    Statement stmt=conn.createStatement();

    String sql="insert into test values

                (default,'testidentity')";

    int rows=stmt.executeUpdate(sql);

    ResultSet rs=stmt.getGeneratedKeys();

    rs.next();

    int result=rs.getInt(1);

System.out.println(obj);

 

结果就是自动增长列的值,JDBC3.0中提供的getGeneratedKeys()方法就是解决这样问题的,上面的JDBC代码在mysql5中测试通过。但是在sqlSQLserver2000中的驱动没有这样的支持,据说在sqlSQLserver2005中有这样的支持。在SqlServer2000该如何处理呢?只能借助于函数SCOPE_IDENTITYIDENT_CURRENT 或者全局变量 @@IDENTITY了。下面看看他们的用法

 

SQLServer

SCOPE_IDENTITYIDENT_CURRENT@@IDENTITY 在功能上相似,它们都返回插入到 IDENTITY 列中的值。

IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。

语法: IDENT_CURRENT(‘表名’)

使用IDENT_CURRENT将返回特定表中的最后IDENTITY的值,该值也许是别的事务插入的,也就是说:不受作用域和会话的限制,仅仅受限于指定的表。

SCOPE_IDENTITY@@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域

例如,有两个表 T1T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

假设 T1T2 都有 IDENTITY 列,@@IDENTITYSCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个IDENTITY 列值,该值是插入 T2 中的值。

SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

在应用软件开发中,如果在同一个事务中需要自动增长列,那么SCOPE_IDENTITY()是最好的选择,具体用法如下:

String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";

    String url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs";

    Class.forName(driver);

    Connection conn=DriverManager.getConnection(url,"sa","");

    Statement stmt=conn.createStatement();

    String sql="insert into test values ('testidentity') select scope_identity()";

    ResultSet rs=stmt.executeQuery(sql);

    rs.next();

    int result=rs.getInt(1);

    System.out.println(result);

 

分享到:
评论

相关推荐

    SQL SERVER 2000开发与管理应用实例

    14.1.3 系统表应用中三个重要的系统存储过程 426 14.2 系统表在对象信息检索中的应用 429 14.2.1 搜索指定的对象所处的数据库 429 14.2.2 获取存储过程参数定义 432 14.2.3 搜索指定字符在哪个表的哪个...

    基于Android平台应用程序的关键字驱动自动化测试-理论,工具

    鉴于此,并结合传统桌面系统上的自动化测试经验,我们在此探讨基于Android平台应用程序的关键字驱动自动化测试的可能性,并摸索一条适合在移动应用开发过程日新月异的现实情况中切实有效的实施自动化测试的方法。

    2021中国人工智能应用趋势报告.pdf

    报告摘要
 新基建加速人工智能应用落地 
●新冠疫情、经济...● 随着人工智能应用不断深入,作为基础设施之一,人工智能治理体系建设的紧迫性不断增强,企业应当将治理
体系作为人工智能应用中的重要考量因素。

    爬虫开发:数据采集与应用的利器.docx

    本文将探讨爬虫开发的基本原理、常见技术和实际应用,旨在帮助读者更好地理解和应用爬虫技术。 正文: 爬虫开发的基本原理 爬虫(Spider)是一种自动化程序,可以模拟人类用户在互联网上浏览和访问网页的行为,...

    陕西省国家开发银行应用CBS备份系统成功案例

    陕西省国家开发银行计算机系统实现了以下功能:实现了数据的有效管理和保护,全自动化的备份管理策略,全自动系统恢复,灵活的扩展性使用户自己掌握增长的速度,高效的自动化智能灾难备份、恢复,可以保证在最短的...

    【创新创业材料】煤移动煤流采制样技术开发研究及应用-可行性研究报告.zip

    移动煤流采制样技术通过先进的机械装置直接在煤炭运输过程中进行自动采样,有效解决了传统静态采样方法中存在的样本偏差大、耗时长等问题。它不仅提升了采样的代表性和准确性,还显著降低了人工成本,增加了操作的...

    人工智能在制造业中的应用.pptx

    2023/5/31 11 工业机器人国际市场 2018年是工业机器人自1961年问世以来销售量最高的一年,年销售量达42.2万台,比2017年增长了6% 人工智能在制造业中的应用全文共57页,当前为第11页。 2023/5/31 12 我国已成为世界...

    罗克韦尔自动化中压变频器维护保养服务介绍.flv

    在中国,罗克韦尔自动化拥有超过1000多名雇员,25个销售机构(包括香港,台湾地区),5个培训中心,1个研发中心、1个软件开发中心和2个OEM应用开发中心,在上海设有生产基地。公司与国内几十家授权渠道伙伴及31所...

    DevOpsGenius 旨在结合 LLM 重塑软件开发中的 DevOps 实践.zip

    AIGC(Artificial Intelligence Generated ...AIGC在学术研究中的应用需要遵循特定的使用边界和准则,以防止学术不端行为。明确的指南有助于确保研究成果的真实性和可信度,同时推动AI技术在科研领域的健康发展。

    人工智能介绍及应用.pptx

    应用包括过程自动化、机械制造自动化、管理自动化和家庭自动化等 不断提高传统行业的技术水平和市场竞争力,并与光电子、计算机、信息技术等融合和创新,不断创造和形成新的经济增长点和管理战略哲理 人工智能介绍及...

    大数据在旅游业中的应用分析报告.doc

    (三)大数据在酒店中的应用 1、大数据有助于精确酒店行业市场定位 2、大数据成为酒店行业市场营销的利器 3、大数据支撑酒店行业收益管理 4、大数据创新酒店行业需求开发 (四)大数据在旅游交通中的应用 ...

    QCon北京 2019年全球软件开发大会PPT合集(104份).zip

    转化率预估技术在腾讯广告业务中的应用与挑战 中小互联网公司如何落地云安全 智能音箱场景下的性能优化 智能小程序平台的架构思考与实践 智能客服系统的构建与算法迭代 智能播放技术及应用 支撑亿级运单的配运平台...

    JAVA WEB项目开发案例精粹-OA系统

    办公自动化系统的英文名称为Office Automation System,简称为OA。随着企业信息量的增长,传统的企业内部信息交流方式已经不能满足大量信息的快速传递和处理,这时越来越多的...在本章就来开发这样一套办公自动化系统。

    QCon上海 2020年全球软件开发大会PPT合集(49份).zip

    QCon上海 2020年全球软件开发大会PPT合集(49份)。 AI肢体识别技术在智能诊断上的实践 TiDB HTAP 的架构演进进展及实践 不止于弹性 - 云原生数据湖体系构建之道 超爱规模视频会议时间 从reInvent 看如何加速机器...

    dotnetcoding ORM 代码生成器

    数据库中的所有逻辑对象表,列,字段,主键,外键,Null, Default,唯一索引都在类里得到了体现,同时还支持代码表,代码列,自增长机制. 系统支持完整的数据操作功能,支持带事务功能的数据操作,提供数据自动装载功能,有很强...

    京东仓储自动化解决方案

    京东仓储自动化解决方案是针对快速增长的电商行业而开发的一种高效的仓储管理解决方案。该方案采用了先进的物联网技术和人工智能技术,可以实现仓库物流的全面自动化,大大提高了仓库的效率和准确性。 该方案主要...

    QCon 2022全球软件开发大会上海站(公开)PPT汇总(56份).zip

    聚焦增长,探索 RTC 在互娱应用的新进化 全链路大数据安全平台建设 面向LakeHouse的云存储关键技术及落地实践 面向自动驾驶的 AI 训练统一存储最佳实践 前后端分离的架构在 VS Code 中的应用 如何管理超千万核资源的...

    Android C++高级编程: 使用NDK

    《移动开发经典丛书·Android C++高级编程:使用NDK》中我们将学习如何用AndroidNDK通过原生代码语言去实现自己的Android应用中对性能要求较高的部分。  《移动开发经典丛书·Android C++高级编程:使用NDK》介绍了...

    Android C++高级编程使用NDK

    《移动开发经典丛书·Android C++高级编程:使用NDK》中我们将学习如何用AndroidNDK通过原生代码语言去实现自己的Android应用中对性能要求较高的部分。  《移动开发经典丛书·Android C++高级编程:使用NDK》介绍了...

    集成了LLM与SDXL的AIGC应用程序.zip

    AIGC(Artificial Intelligence Generated ...AIGC在学术研究中的应用需要遵循特定的使用边界和准则,以防止学术不端行为。明确的指南有助于确保研究成果的真实性和可信度,同时推动AI技术在科研领域的健康发展。

Global site tag (gtag.js) - Google Analytics