CCh99

事务

事务

事务是指将一系列数据操作捆绑成为一个整体进行统一管理。

如果某一事务执行成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。

如果事务执行时遇到错误且必须取消或回滚,则数据全部恢复到操作前的状态,所有数据的更改均被清除。

什么是事务

事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。因此事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是作为最小的控制单元来使用的,特别适用于多用户同时操作的数据库系统。例如:航空公司的订票系统,银行、保险公司以及证券交易系统。

事务的原则:ACID原则

原子性(Atomicity)

指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)

事务前后数据的完整性必须保持一致。

隔离性(Isolation)

多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)

指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

如何执行事务

InnoDB存储引擎管理事务主要通过UNDO日志和REDO日志实现。

UNDO日志:复制事务执行前的数据,用于在事务发生异常时回滚数据

REDO日志:记录在事务执行中,对数据进行的每条更新操作,当事务提交时,该内容将被刷新到磁盘

具体例子

默认条件下,每条SQL语句就是一个事务,即执行SQL语句后自动提交,为了达到几个操作作为一个整体的目的,需要手动操作事务

--创建数据库
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci

--进入该数据库
USE shop

--创建表
CREATE TABLE account(
id INT(3) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`name`  VARCHAR(30) NOT NULL,
money DECIMAL(9,2) NOT NULL
)ENGINE=INNODB CHARSET=utf8
--插入数据
INSERT INTO  account VALUES(NULL,'刘涛',1000.00),(NULL,'张山',100090.00)
--手动操作事务

--关闭自动提交
SET autocommit=0
--开始事务
START TRANSACTION  ||  BEGIN
--操作
UPDATE account SET money=money-500 WHERE `name`='刘涛'
UPDATE account SET money=money-500 WHERE `name`='张山'
--提交
COMMIT
--回滚
ROLLBACK
--开启自动提交
SET autocommit=1

posted on 2021-03-14 15:27  CCh99  阅读(56)  评论(0编辑  收藏  举报

导航