当然,我可以像这样对每一列进行比较:
if (old.column1 = new.column1 and old.column2 = new.column2...)
Run Code Online (Sandbox Code Playgroud)
但是,例如,如果我将来添加另一列,它将是硬编码的并且难以维护。
有没有办法检查所有列是否保持不变而无需手动检查每个单独的列?
如果我有一个用户表:
id | name | age
1 | Mateus | 27
Run Code Online (Sandbox Code Playgroud)
第一个事务执行更新,并使事务保持打开状态,不提交或回滚:
update User set name = 'John' where id = 1;
同时,第二个事务执行一个选择:
select * from User where id = 1;
该命令将等待第一个事务通过提交或回滚释放锁,除非第二个事务使用表提示with(nolock),如下所示:
select * from User with(nolock) where id = 1;
这将返回记录而不锁定事务,但是它将返回未提交的值John而不是原始值Mateus。
据我所知,只有两种方法可以在不锁定当前事务的情况下返回锁定的记录,一种可以使用with(nolock)将返回记录但带有未提交值的方法,并且with(readpast)不会返回记录。
有没有办法可以在不锁定表的情况下返回记录并返回其“旧”值?