首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

确定SQL触发器中的旧主键

在数据库中,SQL触发器是一种特殊类型的存储过程,它可以在执行某些操作(如插入、更新或删除)时自动执行。在这种情况下,旧主键是指在更新或删除操作之前的主键值。

确定SQL触发器中的旧主键可以使用以下方法:

  1. 使用OLD关键字:在触发器中,可以使用OLD关键字来引用旧行的值。例如,如果要在更新操作之前获取旧的主键值,可以使用以下语句:
代码语言:txt
复制
SELECT OLD.primary_key_column FROM OLD;
  1. 使用BEFORE关键字:在创建触发器时,可以使用BEFORE关键字来指定触发器应该在操作之前执行。这样,在触发器内部,可以使用OLD关键字来引用旧行的值。例如,以下是一个在更新操作之前获取旧主键值的触发器示例:
代码语言:txt
复制
CREATE TRIGGER my_trigger
BEFORE UPDATE ON my_table
FOR EACH ROW
BEGIN
  SELECT OLD.primary_key_column INTO @old_primary_key FROM OLD;
  -- 在此处执行其他操作
END;

需要注意的是,在触发器中,只有OLDNEW关键字可以引用旧行和新行的值。如果需要在触发器中引用其他表或变量,需要使用正确的语法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(细节)My SQL主键为0和主键自排约束关系

开始不设置主键设计如下: 如果id位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增; Insert 进去 id = 0数据,数据会从实际行数开始增加,和从0变化不一样; 现在主键是没有...如果使用主键自排约束以前表里有0,再设置完主键自排以后所有的0又不会根据行数,而是直接按照自上而下顺序从1开始排。...如果把表某个主键数改成0,那直接就会进行排序放到正数前面,也就是说主键自排是允许有0存在,那为什么本身存在0要去修改成从1开始递增序列呢?...开始没0,增加主键自排约束,新添加主键是0行会根据行数自行变化,注意这里是新添加行,使用是insert。   开始没0,把某个主键数修改成0,这个0会直接在排好序了再在表里显示出来。...说得简单一点就是,增加主键自排约束后:    主键值:修改成0,可以存在,就是排个序。         新添加0,不允许存在,要根据行号改变。

1.2K40

(解释文)My SQL主键为0和主键自排约束关系

上一篇我们说了关于自排如果主键是0问题,在这里我搞清楚了原因,导致这种情况是因为在SQL对自排设置了初始值:   从这里可以看到这两个变量一个是自增初始值,一个是增量,这里都是1,所以在设置自增时候会把那个字段原来存在所有...0变成从1开始步长为1等差数列。   ...但是这个数值是可以被修改(不过在这里不建议修改),在insert时候如果插入是0,则会默认以插入行号为准,也就是默认值自动变成了行号。   ...首先我们得明白,主键自排,为什么要使用主键自排,还不因为以后索引等很多操作方便,所以这里插入时会以行号来改变0完全合理。

1.3K50
  • oracle删除主键索引sql语句_oracle主键索引和普通索引

    “ORA-02429: 无法删除用于强制唯一/主键索引”,其实从错误提示信息已经很明显了。...下面还是用一个简单例子述说一下该错误来龙去脉。 ORA-02429错误原因是因为用户试图删除一个用于强制唯一/主键索引,解决方法也很简单,删除对应约束就会自动删除该索引。...------------ PK_TAB_TEST 4:查看测试表约束信息: SQL> SELECT CONSTRAINT_NAME FROM DBA_CONSTRAINTS WHERE TABLE_NAME...='TAB_TEST'; CONSTRAINT_NAME ------------------------------ PK_TAB_TEST 5:删除测试表索引PK_TAB_TEST SQL>...oracle主键修改&设置某一字段可以为null 1.oracle主键修改 1.1)首先查看需要修改主键名,默认情况下,数据库会自动分配 select * from user_cons_columns

    3.8K10

    SQL触发器使用及语法

    定义: 何为触发器?在SQL Server里面也就是对某一个表一定操作,触发某种条件,从而执行一段程序。触发器是一个特殊存储过程。 ...注意Deleted 与Inserted分别表示触发事件表“一条记录”和“新一条记录”。 ...SQL触发器实例2 /*  建立虚拟测试环境,包含:表[卷烟库存表],表[卷烟销售表]。  请大家注意跟踪这两个表数据,体会触发器到底执行了什么业务逻辑,对数据有什么影响。 ...*/  –针对[卷烟销售表],插入第三条测试数据,该数据卷烟品牌在 卷烟库存表库存为0。  –触发器将报错。 ...(2)、触发器不允许以下 Transact-SQL 语句:  ALTER DATABASE CREATE DATABASE DISK INIT  DISK RESIZE DROP DATABASE LOAD

    1.4K30

    SQL基础【十九、触发器】(不建议使用触发器原因)

    什么是触发器触发器是与表有关数据库对象,在满足定义条件时触发,并执行触发器定义语句集合。...触发器特性:   1、有begin end体,begin end;之间语句可以写简单或者复杂   2、什么条件会触发:I、D、U   3、什么时候触发:在增删改前或者后   4、触发频率:针对每一行执行...假设触发器触发每次执行1s,insert table 500条数据,那么就需要触发500次触发器,光是触发器执行时间就花费了500s,而insert 500条数据一共是1s,那么这个insert效率就非常低了...因此我们特别需要注意一点是触发器begin end;之间语句执行效率一定要高,资源消耗要小。   ...触发器尽量少使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎使用,确定它是非常高效触发器是针对每一行;对增删改非常频繁表上切记不要使用触发器,因为它会非常消耗资源。

    1.1K30

    绕过SQL Server登录触发器限制

    (SSMS) 创建一个主机名限制登录触发器 以下是在家庭实验环境设置触发器说明,该触发器将根据连接工作站名称来限制访问。...以下是在家庭实验室设置触发器说明,该触发器将根据连接应用程序名称来限制访问。...使用SSMS欺骗应用程序名称 同样地你可能会问,“我们(攻击者)什么时候会在现实世界实际使用它呢?”。某些应用程序名称已经在连接SQL Server连接字符串静态设置。...寻找白名单列表主机和应用程序名 如果你不确定登录触发器白名单列表中有哪些主机和应用程序名,则可以借助下面的这些方法。...考虑根据用户组和访问权限来限制对SQL Server访问,而不是使用登录触发器。 在本文中,我介绍了一些鲜为人知利用连接字符串属性来绕过SQL Server登录触发器强制执行访问限制方法。

    2.1K10

    PKSRS触发器和SR触发器

    上大学时,学习《数字电子技术》这门课,第一次接触到RS触发器概念,当时学了个囫囵吞枣,只知道有个置位端,还有个复位端,当置位端为ON时,RS触发器输出为ON,当复位端为ON时,RS触发器输出为OFF...,至于置位端和复位端都为ON,或者都为OFF,触发器输出会怎样,什么情况下需要使用RS触发器,当时根本就没有考虑,看来教学和应用还是有点脱节。...PKS系统采用就是这种解决方案。 SR触发器真值表: RS触发器真值表: RS触发器在什么情况下需要使用呢? 举个实际应用案例: 有个污水池排水泵,泵启动和停止是由污水池液位决定。...在这个案例,置位端和复位端不可能同时为ON,因此使用RS触发器和使用SR触发器效果是一样,没有区别。...如果置位端信号和复位端信号有可能同时为ON,则要仔细考虑谁更有优先权,从而决定使用RS触发器还是SR触发器。 PKS专家: 剑指工控—靳涛: 工控专家!22年DCS从业经验!

    1.2K20

    SQL 确定序列里缺失值范围

    有一个序列表 seq,它有一个存整数序列值字段叫作 id,原本序列值是连续递增,但因某些原因,有的值丢失了,我们希望能通过 SQL 找出缺失值范围。...先来构造有缺失值 seq 表,可以用 SQL 派生出这个表。...这些缺失值范围是: start stop 4 4 9 11 14 14 16 17 上表就是我们需要通过 SQL 生成结果。 接下来说说实现 SQL 思路。...第一,把 seq 表 id 字段每个值 + 1 后再和 seq 表数比较,如果不在 seq 表,说明该数 + 1 是缺失值,且是一段缺失值范围起始值。...比如对于缺失值 9,在 seq 表能找到大于 9 最小值是 12,12 - 1 = 11 就是该段缺失数据范围结束值。

    1.4K20

    MySQL主键为0和主键自排约束关系

    开始不设置主键设计如下: 如果id位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增; Insert 进去 id = 0数据,数据会从实际行数开始增加,和从0变化不一样;...现在主键是没有0,如果把某个id改成0的话,0不会变!...如果把表某个主键数改成0,那直接就会进行排序放到正数前面,也就是说主键自排是允许有0存在,那为什么本身存在0要去修改成从1开始递增序列呢?...开始没0,增加主键自排约束,新添加主键是0行会根据行数自行变化,注意这里是新添加行,使用是insert。   开始没0,把某个主键数修改成0,这个0会直接在排好序了再在表里显示出来。...说得简单一点就是,增加主键自排约束后:    主键值:修改成0,可以存在,就是排个序。         新添加0,不允许存在,要根据行号改变。

    4.3K30

    WPF触发器(Trigger)

    这节来讲一下WPF触发器——Trigger。触发器,是指在既定条件或者特殊场景下被触发,从而去执行一个操作。...控件哪个属性触发,Value设置当属性为何值时触发,在Setter也有Property和Value,此处则是设置触发时要执行操作,上述触发器作用时当SliderValue为1时,设置其背景为纯绿色...当我们想监视多个属性值来控制触发器执行,可以使用MultiTrigger,请看如下代码: 多属性触发器,需要将多个触发条件写在MultiTrigger.Conditions,其它用法都是一致...,上述代码,当SliderValue为1并且样式为垂直时候,触发器才会触发,运行结果如下: 2事件触发器(EventTrigger) 请先看如下代码: 事件触发器有些不同是...,上述代码,当SliderValue为1并且最大值为1时候,触发器才会触发,运行结果如下: 本节到此结束...

    3.1K30

    MySQL触发器使用

    触发器触发器使用场景以及相应版本: 触发器可以使用MySQL版本: 版本:MySQL5以上 使用场景例子: 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州缩写是否为大写 每当订购一个产品时...可以引用一个名为NEW虚拟表,访问被插入行; 在before insert触发器,NEW值也可以被更新(允许更改被插入值) 对于AUTO_INCREMENT列,NEW在insert执行之前包含...: 在update触发器代码,可以引用一个名为OLD虚拟表访问以前值,即:update未执行前值,还可以引用一个名为NEW虚拟表访问新更新值; 在before update触发器,NEW...值可能也被更新(允许修改将要用于update语句中值); OLD值全部只读,不能更新。...: 在DELETE触发器在delete语句执行之前或之后执行: 在delete触发器代码内,可以引用OLD虚拟表,访问被删除行; OLD值全部都是只读,不能更新 例子: 使用old保存将要被删除行到一个存档表

    3.3K10

    批量更新数据小心SQL触发器陷阱

    批量更新数据时候,Inserted和Deleted临时表也是批量,但触发器只会调用执行一次!两个概念千万不要弄混淆!...错误理解;例如:创建在A表上创建了一个Update触发器,里面写是Update一条记录;当在A表进行update数据时候,会调用执行触发器一次,不可能因为触发器中有Update语句会又执行一次,那样岂不是死循环了...本文章转载:http://blog.csdn.net/baronyang/article/details/5174734 原来update触发器只会被update触发一次,无论更新记录数是多少,以下为验证代码...字段值都更新为2000,但TMP_TABLE2Amount值只有第一条记录更新了,下面改一下触发器 Alter TRIGGER dbo.tmp_table1_update ON tmp_table1...总结:为了保险起见,update触发器还是要用游标来处理,才能保证全部触发执行.

    1.2K10

    .NET生成MongoDB主键ObjectId

    前言   因为很多场景下我们需要在创建MongoDB数据时候提前生成好主键为了返回或者通过主键查询创建业务,像EF我们可以生成Guid来,本来想着要不要实现一套MongoDBObjectId,...结果发现网上各种各样实现都有,不过好在阅读C#MongoDB驱动mongo-csharp-driver代码时候发现有ObjectId.GenerateNewId()方法提供,我们可以直接调用即可,...MongoDB ObjectId类型概述  每次插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型,也可以手动插入,默认情况下它数据类型是ObjectId,由于MongoDB...在设计之初就是用作分布式数据库,所以使用ObjectId可以避免不同数据库_id重复(如果使用自增方式在分布式系统中就会出现重复_id值)。...ObjectId使用12字节存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成字符串,在这24个字符串,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程

    1.3K20

    用于确定 SQL Server recovery何时完成脚本

    ◆ 二、解决方案 您知道 SQL Server ERRORLOG 实际上会计算自己估计值吗?...日志条目有时可能会让人不知所措且过于详细,因此我们将使用一个简单 SQL 查询来生成易于阅读且令人惊讶准确估计结果。 我们将从以下查询开始。...请务必将数据库设置为“master”,并将第一行变量“@DBName”替换为您要调查数据库。如果需要,您还可以修改此查询以包含更多结果(例如“SELECT TOP 10”)。...: 此查询可以根据需要经常刷新,并将返回恢复数据库最新日志条目。...请注意,“MinutesRemaining”和“HoursRemaining”列代表不同度量相同估计值——它们不能相加。

    1K20

    漫谈 · 软件确定

    确定性原理前世今生 · 数学篇 这篇文章从数学角度讲的是:任何信息时空分辨率和频率分辨率是不能同时被无限提高。...此外,不确定原理涉及很多深刻哲学问题,用海森堡自己的话说:“在因果律陈述,即‘若确切地知道现在,就能预见未来’,所得出并不是结论,而是前提。我们不能知道现在所有细节,是一种原则性事情。”...这里面说其实是鱼和熊掌不可兼得。在工作,其实也有很多类似的冲突。 从公司宏观层面来说,有着《战略悖论-企业求成得败原因及应对之道》。...那么宏观层面的不确定性,则会将不确定传导到微观执行层面。 在一个公司,微观执行层面,指更多是技术层面,比如软件开发人员。在技术层面的东西,其实确定性反而是非常高。...这里面就涉及到了宏观不确定与微观确定性之间冲突。 产品经理,总是在不断打磨产品,势必就要不停反反复复变换需求,并上线验证,通过用户反馈,又来不停修改产品。

    55930

    确定 SQL 查询都是以 SELECT 开始

    很多 SQL 查询都是以 SELECT 开始。...于是我又想到了另一个问题:SQL 查询执行顺序是怎样? 好像这个问题应该很好回答,毕竟自己已经写了上万个 SQL 查询了,有一些还很复杂。但事实是,我仍然很难确切地说出它顺序是怎样。...但数据库引擎并不一定严格按照这个顺序执行 SQL 查询,因为为了更快地执行查询,它们会做出一些优化,这些问题会在以后文章解释。...混合因素:列别名 有很多 SQL 实现允许你使用这样语法: 从这个语句来看,好像 GROUP BY 是在 SELECT 之后执行,因为它引用了 SELECT 一个别名。...这里有一个 LINQ 查询例子: pandas 查询也基本上是这样,不过你不一定要按照这个顺序。

    1.7K20

    sql server 实验5.2 触发器建立与使用

    4、 SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表逻辑结构与被触发器作用表一样,用户可以读取这两个表内容,但不能对它们进行修改,触发器执行完后,...当执行INSERT时,INSERTED表中保存要向表插入所有行;当执行DELETE时,DELETED表中保存要从表删除所有行;当执行UPDATE时,修改前行保存在DELETED表,修改后行保存在...三、实验设备 安装有SQL SERVER 2000计算机。 四、实验示例 1、写一个允许用户一次只删除一条员工记录触发器。...(参照customer表),不允许向sales表插入customer表不存在客户。...') drop trigger unin_sales 6、针对employee表,定义一触发器用来保证实体完整性,阻止用户修改Employee表emp_no列。.

    2.1K20
    领券