02-012 MySQL_基础_事务及TCL语言

标识列

又称自增长列,不用手动插入,系统提供默认的序列值。
1.创建表时设置标识列

create table if exists tab_identity(
	id int primary key auto_increment,
	name varchar(20)
)

特点:
①标识列必须和一个key搭配,未必是主键;
②一个表最多只能有一个标识列;
③标识列的类型只能是数值型;
④标识列可以用set auto_increment_increment = 3;设置步长。

2.修改表时设置标识列
alter table tab_identity modify column id int primary key auto_increment;

3.修改表时删除标识列
alter table tab_identity modify column id;

事务

事务控制语言:TCL(Transaction Control Language)
事务:一个或者一组SQL语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。
回滚:撤销所有操作,回到数据的最初状态。
存储引擎:在MySQL中的数据用各种不同的技术存储在文件(或内存)中。show engines;来查看。
常用的存储引擎:MyISAM、innodb、memory
innodb支持事务,MyISAM、memory不支持事务。

事务的ACID属性

1.原子性(Atomicity)
事务是一个不可分割的工作单位,要么都发生,要么都失败。
2.一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3.隔离性(Isolation)
事务执行不受其他事务干扰,并发执行的事务互不干扰。
4.持久性(Durability)
一个事务一旦提交,数据库的改变是永久性的。

事务的创建

隐式事务:事务没有明显的开启和结束的标记。
比如 insert、update、delete
显示事务:事务具有明显的开启和结束的标记。
前提:必须先设置自动提交功能为禁用
步骤1:开启事务
set autocommit=0;(只针对当前事务)
start transaction;(可选的,写不写都行)
步骤2:编写事务中的sql语句(select、insert、update、delete
语句1;
语句2;

步骤3:结束事务
commit;提交事务
rollback;回滚
jdbc可进行试验

#开启事务
set autocommit =0;
start transaction;
#一组事务语句
update account set balance = 500 where id =1
update account set balance =1500 where id=3;
#结束事务
commit;

事务的并发

脏读:事务T1、T2,T1读取了已经被T2更新但还没提交的字段后,如果T2回滚,则T1读取的内容就是临时且无效的,
不可重复读:T1读取一字段后T2更新该字段,T1再查结果就不一样了。
幻读:T1读取一字段后T2插入新行,T1再读会多几行。

四种事务隔离级别

全局变量 @@tx_isolation mysql8.0后@@transaction_isolation
查看当前的隔离级别:select @@tx_isolation;
设置隔离级别:set session transaction isolation level serializable;

脏读 不可重复读 幻读
read uncommitted
read committed
repeatable read
serializable

MySQL默认第三个隔离级别repeatable read
Oracle默认第二个隔离级别read committed
serializable效率很低,用默认的就可以。

回滚点演示(savepoint)

set autocommit=0;
start transaction;
delete from account where id= 25;
savepoint a;#设置保存点
delete from account where id= 25;
rollback to a;#回滚到保存点

学习整理于MySQL 基础+高级篇.

发布了53 篇原创文章 · 获赞 0 · 访问量 394

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103604721