• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 对有insert触发器表取IDENTITY值时发现的问题

对有insert触发器表取IDENTITY值时发现的问题

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了insert,触发器,IDENTITY等相关知识,希望本文的分享对您有所帮助

赶快查了下msdn,原来@@IDENTITY还有这么多讲究

问题是这样的:
T1表上有一个INSERT的触发器,在插入数据的时候,会自动往T2表里面插一条记录
这样当我在T1表上插入新的数据时,取@@IDENTITY的时候,返回的id值是T2表里面的新记录的值

赶快查了下msdn,原来@@IDENTITY还有这么多讲究:

在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。


如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函数,因为他们都返回插入到表的 IDENTITY 列的最后一个值。
@@IDENTITY 和 SCOPE_IDENTITY 可以返回当前会话中的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 可以返回任何会话和任何作用域中为特定表生成的标识值。
@@IDENTITY 函数的作用域是执行该函数的本地服务器上的当前会话。此函数不能应用于远程或链接服务器。若要获得其他服务器上的标识值,请在远程服务器或链接服务器上执行存储过程,并使(在远程或链接服务器的环境中执行的)该存储过程收集标识值,并将其返回本地服务器上的发出调用的连接。


所以对多个表进行操作的时候,最好用
SELECT SCOPE_IDENTITY()和SELECT IDENT_CURRENT(‘T1')方式
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • msyql show命令汇总
  • mysql如何让自增id归0解决方案
  • 如何测试mysql触发器和存储过程
  • mysql 触发器实现两个表的数据同步
  • SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍
  • 使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值
  • MySQL中REPLACE INTO和INSERT INTO的区别分析
  • mysql insert if not exists防止插入重复记录的方法
  • mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )
  • mysql 操作总结 INSERT和REPLACE

相关文章

  • 2018-12-05Oracle组件实现动态Web数据库
  • 2018-12-05MySQL中存储引擎InnoDB与MyISAM的详解
  • 2017-05-11MySQL异常处理浅析
  • 2017-05-11浅析MySQL内存的使用说明(全局缓存+线程缓存)
  • 2017-05-11SUSE Linux下源码编译方式安装MySQL 5.6过程分享
  • 2018-12-05MemSQL学习笔记-类似MySQL的数据库
  • 2018-12-05Acc数据库转SQL数据库工具(简体中文绿色版)和使用方法
  • 2018-12-05关于mysql_info()函数的10篇文章推荐
  • 2017-05-11mysql使用教程之分区表的使用方法(删除分区表)
  • 2018-12-05mysql中的“money”类型说明

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL索引的使用
    • mysql提示[Warning] Invalid (old?) table or database name问题的解决方法
    • 全面接触SQL语法(1)
    • mysql缓冲和缓存设置详解
    • php连接mysql数据库详细步骤(图文)
    • mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
    • Mysql源码学习笔记 偷窥线程
    • Mysql存储引擎特性总结
    • 详解MySQL中的SQRT函数的使用方法
    • mssql 数据库表行转列,列转行终极方案

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有