1、什么是事务?
不可分割的逻辑单元,由多个操作组成。
a.自动提交事务
b.显示事务
c.隐式事务
--创建数据库(仓库)、表(货架)、字段(商品格子) (结构)
1 --创建表和插入测试数据 2 create database BankDB; 3 use BankDB 4 5 create table bank( 6 bankID int primary key not null, 7 name varchar(20) not null, 8 accountmoney money check(accountmoney>=1) 9 ) 10 11 insert into bank 12 select 1001,'张三',500 union 13 select 1002,'李四',1500 union 14 select 1003,'王五',1000
2、数据库的全局变量,数据库全局变量和自定义变量的区别?
@@identity获取最近自动增长的值
@@error 获取错误信息编号
--凡是系统定义的变量@@
--凡是自定义的变量都是@
3、自动提交事务
--insert
--update
--delete 班级表 和 学生表 (约束) sql server 默认的删除中间存在约束的时候都删除不了
4、显示事务
--开始事务 begin transaction
1 --模拟转账的操作 2 3 --因为有多个操作,至少两个 update 修改减张三的钱 update修改加李四的钱,其他还可能有系统日志和业务日志(设备编号、通过哪个业务员转,可能还有insert) 4 5 6 7 declare @errorNum int=0 --定义存放错误的结果 8 9 update bank 10 11 set accountmoney=accountmoney-500 12 13 where bankid=1001 and name='张三' --索引或者字段较小 14 15 16 17 18 set @errorNum=@errorNum+@@error --如果出错,这是@@error非零的错误数字 19 20 update bank 21 22 set accountmoney=accountmoney+500 23 24 where bankid=1002 and name='李四' 25 26 27 28 set @errorNum=@errorNum+@@error --非零的错误数字 29 30 31 32 33 if @errorNum<>0 34 35 begin 36 37 rollback transaction; 38 39 end 40 41 else begin 42 43 commit transaction; 44 45 end; 46 47 48 49 50 --事务四种特性 --原子性、一致性、隔离性、持久性 查询--对数据没有更新操作 51 52 commit; 53 54 update bank 55 56 set accountmoney=accountmoney-500 57 58 where bankid=1001 and name='张三' --索引或者字段较小 --独立的 59 60 61 62 update bank 63 64 set accountmoney=accountmoney+500 65 66 where bankid=1002 and name='李四'
5、隐式事务(sql server 要手动开启,oracle默认就是隐式事务)
隐式事务,insert等之后数据是没有持久化的,需要commit持久化,没有commit是脏数据(存放在内存缓冲区)
隐式事务如果开启,insert update delete 都不会自动持久化,需要大家手动的持久化
set implicit_transactions off 开启隐式事务、off 关闭
select * from bank rollback; --回滚 commit; --提交 insert into bank values(1005,'洪七公',500)