SQL之事务

Posted winter-bamboo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL之事务相关的知识,希望对你有一定的参考价值。

●事务的ACID(acid)属性

?1.原子性(Atomicity )

原子性是指事务是-一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

?2. 一致性(Consistency)

事务必须使数据库从一一个--致性状态变换到另外一一个--致性状态

?3.隔离性(Isolation)

事务的隔离性是指一- 个事务的执行不能被其他事务干扰,即一一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

?4.持久性(Durability)

持久性是指-一个事务-一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

●事务的类型

 隐式事务: 事务没有明显的开启和结束的标记比如insert、update、 delete语句
delete from:    表where id =1;

显式事务事务具有明显的开启和结束的标记前提 , 必须先设置自动提交功能为禁用 
set autocommit = 0;
●事务的使用
#步骤一:开启事务
set autocommit = 0;
start transaction ; #可选的
#步骤二: 编写事务的sql语句(select , insert , update , delete) 
SELECT * FROM sys;
...
#步骤三:结束事务
commit ;  #提交事务
#rollback; #回滚事务,即使事务执行成功,表中数据也不会保存在磁盘中,但是会将事务中操作的表显示,类似于SELECT出来的表可以显示但是不会保存
●示例
1)成功执行
DROP DATABASE IF EXISTS human;
CREATE DATABASE IF NOT EXISTS human;
USE human;
CREATE TABLE man(
    id INT PRIMARY KEY AUTO_INCREMENT ,
    name VARCHAR(20) NOT NULL
);

SET AUTOCOMMIT = 0;
START TRANSACTION;
insert man
VALUES (NULL,archer),(NULL,saber),(NULL,lancer) ;
#insert man
#VALUES (NULL,NULL);
SELECT * FROM man;
COMMIT;
#ROLLBACK; #这里不进行回滚操作,如果需要回滚,那么将COMMIT注释并撤销这句的注释就好

技术图片

2)失败执行(事务中部分语句无法执行,导致整个事务没有提交)

DROP DATABASE IF EXISTS human;
CREATE DATABASE IF NOT EXISTS human;
USE human;
CREATE TABLE man(
    id INT PRIMARY KEY AUTO_INCREMENT ,
    name VARCHAR(20) NOT NULL
);

SET AUTOCOMMIT = 0;
START TRANSACTION;
insert man
VALUES (NULL,archer),(NULL,saber),(NULL,lancer) ;
insert man
VALUES (NULL,NULL);#这条语句无法执行
SELECT * FROM man;
COMMIT;
#ROLLBACK;

技术图片

 

 

以上是关于SQL之事务的主要内容,如果未能解决你的问题,请参考以下文章

BottomNavigationView 滞后于片段事务

Mybatis -- 动态Sql概述动态Sql之<if>(包含<where>)动态Sql之<foreach>sql片段抽取

Mybatis框架第二篇

PHP面向对象之事务脚本模式

SQL之事务

SQL语言 之 事务控制