SQL——事务
2018-04-04 本文已影响0人
薛定谔与猫的故事
事务(transaction)由查询和更新语句序列组成(何为序列,有序的列)。
SQL规定当一条SQL语句被执,就隐式地开始了一个事务。系列SQL语句之一会结束一个事务。
Commit work:提交当前事务,也就是将该事务所做的更新在数据库中持久保存,并结束当前事务,开始一个新的事务,通俗来讲就是保存了文档。
Rollback work:回滚当前事务,即撤销该事务中所有SQL语句对数据库的更新。这样,数据库就恢复到执行该事务第一条语句的之前的转态,通俗来讲就是不保存并退出编辑。
例如先后执行下面语句
COMMIT WORK ;
INSERT INTO department
VALUES ('design','tylor',400000);
ROLLBACK WORK ;
department表的变化如下:
insert
rollback
事务是很有用。但在事务执行过程中检测到错误是,事务回滚是有用的。例如,如果一个事务还没有完成,即commit work,一旦发生SQL语句错误、断电、系统崩溃时,数据库系统能够回滚。
事务回滚的典型例子就是银行事务,比如转账,转到一半的事务突然断电,那么数据库是系统就应该回滚,恢复原来的状态。否则,你的钱转走了,而对方又没有收到,那就哭死了T_T。
SQL:1999允许将多条语句组成单一事务,用begin atomic……end括起。
例如(伪代码):
#@@error是全局变量,能获取上一条SQL是否发生错误的信息
begin atomic
INSERT INTO department
VALUES ('design','tylor',400000)
如果(@@error)rollback atomic
end
commit atomic;
不要问笔者为什么不写具体代码,因为笔者测试用的是mysqlT_T(我丢,不支持)。