嘘~ 正在从服务器偷取页面 . . .

MySQL数据库(五)——TCL语言


含义

事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行。

特点(ACID)

  • 原子性(Atomicity):一个事务是不可再分割的整体,要么都执行要么都不执行。
  • 一致性(Consistency):一个事务可以使数据从一个一致状态切换到另外一个一致的状态。
  • 隔离性(Isolation):一个事务不受其他事务的干扰,多个事务互相隔离的。
  • 持久性(Durability):一个事务一旦提交了,则永久的持久化到本地。

事务使用步骤

隐式事务:事务没有明显的开启和结束的标志,如insert,update,delete语句

显式事务:具有明显的开启和结束的标志

1.开启事务

必须先设置自动提交功能为禁用

注意:只针对当前事务有效,并不是永久性的。

set autocommit = 0;
# 之后可以查看自动提交功能状态(可选)
show variables like "autocommit";
# 开启事务(可选)
start transaction;

2.编写一组sql语句,设置回滚点

语句1(select,insert,update,delete);
语句2;
...
savepoint 回滚点名;
...

3.结束事务

commit; # 提交事务
rollback to 回滚名;/rollback; # 回滚事务

演示案例

create database if not exists test;
use test;
create table if not exists account(
     id int primary key auto_increment,
     username varchar(20),
     balance double
);
insert into account(username,balance) values('张无忌',1000),("赵敏",500); 
# 1.开启事务
set autocommit = 0;
start transaction;
# 2.编写一组语句
update account set balance = 500 where username='张无忌';
update account set balance = 1500 where username='赵敏';
# 3.结束事务
# 提交
commit; 
# 也可以回滚
rollback;

事务并发问题

1、如何发生的

多个事务 同时 操作 同一个数据库的相同数据时

2、并发问题都有哪些

  • 脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务“更新”的数据
  • 不可重复读:一个事务多次读取,结果不一样
  • 幻读:一个事务读取了其他事务还没有提交的数据,只是读到的是 其他事务“插入”的数据

3.如何解决并发问题

方法:设置隔离级别

隔离级别 脏读 不可重复读 幻读
read uncommitted:读未提交 × × ×
read committed:读已提交 × ×
repeatable read:可重复读 ×
serializable:串行化

mysql 中默认第三个隔离级别 repeatable read

oracle 中默认第二个隔离级别 read committed

查看隔离级别

select @@tx_isolation;

设置隔离级别

set session/global tansaction isolation level 隔离级别;

delete 和 truncate在事务使用时的区别

create database if not exists test;
use test;
create table if not exists account(
     id int primary key auto_increment,
     username varchar(20),
     balance double
);
insert into account(username,balance) values('张无忌',1000),("赵敏",500); 
 # 演示delete
set autocommit=0;
start transaction;
delete from account;
rollback;
select * from account;   # 有记录

 # 演示truncate
set autocommit=0;
start transaction;
truncate account;
rollback;    
select * from account;   # 无记录 

如果有其他问题欢迎留言或邮件提问

QQ:1269112498

Email:1269112498@qq.com

相关文章


文章作者: 刘天翼
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 刘天翼 !
评论
  目录