首页 > 数据库 >SQL高级(事务和触发器)

SQL高级(事务和触发器)

时间:2022-10-07 23:55:08浏览次数:47  
标签:语句 触发器 set -- 事务 update SQL

 

事务

四大属性

      1,原子性:事务是一个完整的整体,要么都执行,要么都不执行

      2,一致性:当事务完成时,数据必须处于一致状态

      3,隔离性:对数据修改的所有并发事务是彼此隔离的,即事务必须是独立的,不应以任何方式依赖于或影响其他

      4,永久性:事务完成后,对数据库的操作永久保留

事务控制

      BEGIN:开始事务

      COMMIT:提交事务,COMMIT 命令用于保存事务对数据库所做的更改。

      ROLLBACK:回滚事务,ROLLBACK 命令用于撤销尚未保存到数据库中的事务。

      一旦事务提交或回滚,则事务结束。

注:为判断语句执行是否出错,可使用全局变量@@ERROR。

举个栗子

       题目:改变B表中张三的性别为2时,王五更改为1

 

 代码如下:

 

--开始事务
begin tran
--定义变量,存储错误变量
declare @cw int
set @cw=0
update B set sex=2 where name='张三'
--用@@ERROR判断语句执行是否成功
set @cw+=@@ERROR
update B set sex=1 where name='王五'
set @cw+=@@ERROR
--判断语句执行是否成功
if(@cw<>0)
begin
--不等于0,语句出错,回滚事务
print '语句执行失败,已回滚'
rollback tran
end
else
begin
--等于0,提交事务
print '语句执行成功,已提交'
commit tran
end

 

结果:

 

 

       其实最适合使用事务的,是类似于转账一类的操作,一边余额减少,一边余额就要增加,如果余额减少失败,事务回滚,那么相应的,另一边的余额也就不会再增加

 

触发器

 

DML触发器:
  用户通过数据操作语句 DML(对表或视图的insert、delete、update)编辑数据,则执行DML触发器。系统将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误,则整个事务自动回滚。

举个栗子:

      有题:--A表张三语文成绩减1,就给B表王五的出生年月加1

表A

 表B

 

代码:

--判断触发器是否存在
if exists(select * from sys.triggers where name='trig_update')
drop trigger trig_update
go
--创建触发器
create trigger trig_update
--在A表中创建
on A
--修改触发器
for update
--当触发触发器后要做的操作
as

--定于变量存储错误信息
declare @a int
set @a=0
update B set chusheng+=1 where name='王五'
set @a+=@@ERROR

--不等于0则修改失败
if(@a<>0)
begin
print '王五信息修改失败'
end
else
begin
print '王五信息修改成功'
end
go

 

结果:

 

 

       此触发器执行的就是DML触发器里的update,当A表发生改变,相应的B表也应该进行相关操作,值得注意的是,在update里面,要修改的数据和被修改的数据不能来自同一张表

 

 

标签:语句,触发器,set,--,事务,update,SQL
From: https://www.cnblogs.com/LEEZiiJia/p/16760257.html

相关文章

  • Linux上MySQL的卸载
    MySQL的卸载1、查看当前mysql安装状况rpm-qa|grepmysql#或yumlistinstall|grepmysql2、查看mysql的服务是否启动systemctlstatusmysqld2.1、如果......
  • 学习mysql176. 第二高的薪水
     SQL架构Employee 表:+-------------+------+|ColumnName|Type|+-------------+------+|id|int||salary|int|+-------------+---......
  • CentOS部署MySQL
    Linux上安装MySQL第一步:确保服务器在最新的状态(可有可无)[root@chenstudy~]#yum-yupdate第二步:检测系统是否自带安装MySQL我之前安装过MySQL,现在已经卸载了[r......
  • 2.mysql基础
    说明:学习视频参考尚硅谷--康师傅第一章.数据库概述1.为什么使用数据库?why?     持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情......
  • sql server 锁(lock) 基础及应用(引文)
     sp_getAppLock 获取程序资源锁,简单的说就是调用此函数可以达到我们程序中.NET的lock锁的作用.作用域是当前数据库下四个参数:@resource(必填):资源名称,类型nvarchar(......
  • MySQL随笔1
    MySQL随笔​ 国庆期间花一点时间刷了牛客和力扣的MySQL入门,两个网站的题目各有各的特色。不过最大的感触就是牛客的SQL题你都可以做,但力扣就只给你SQL入门里的题,其他专......
  • 【SQL数据库】(三)SQL查询语言
    三.SQL查询语言3.1SQL概述标准SQL语句包括:查询SELECT、插入INSERT、修改UPDATE、删除DELETE、创建CREATE、删除DROP... 3.1.1SQL发展1.发展过程(略)2.SQL语......
  • SQL视图中的字段与基表中的字段不一致,原因是什么?
        出现这样的原因是修改了表的结构,没有重新编译视图,这种情况出现的几率很少,并不是没有。解决方法:重新编译一下该视图。视图是一个虚表,是从一个或几个基本表(或视......
  • day07-2MySQL索引
    MySQL索引说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就能提高千百倍。例子首先,创建一个有800万条数据的表--创建测试数......
  • centOS安装MySQL
    一、检查系统上是否有mysqlrpm-qa|grepmysql#检查是否安装过MySQLrpm-qa|grepmariadb#检查是否存在mariadb数据库(内置的MySQL数据库),有则强制删除rpm-e--n......