看啥推荐读物
专栏名称: MarvinMao
目录
相关文章推荐
今天看啥  ›  专栏  ›  MarvinMao

mysql进阶知识点之事务

MarvinMao  · CSDN  ·  · 2019-01-01 00:00
  • MySQL 事务主要用于处理操作量大,复杂度高的数据。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert,update,delete 语句。
  • 常用的表的存储引擎是 InnoDB 和 MyISAM,在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 如果开启事务,可以通过rollback;命令撤销sql语句的执行。

1、查看MySQL数据库支持的表的存储引擎:

show engines;
  • 1

查看当前默认的引擎:

show variables like 'default_storage_engine';
  • 1

查看指定表当前的引擎,有2种方式:

show table status where NAME ='table_name' ;
  • 1

或:

show create table table_name;
  • 1

– 在显示结果里参数engine后面的就表示该表当前用的存储引擎
修改指定表的引擎:

 alter table table_name engine=innodb;
  • 1

修改mysql默认的数据库引擎:

  • 打开配置文件my.ini,将“default-storage-engine=MYISAM”改为你想设定的,然后重启mysql服务即可。

2、查看事务状态查看事务是否开启自动,默认是自动开启的:

select @@autocommit
  • 1

3、关闭自动事务,然后每次sql语句后可以跟随rollback 回滚,不执行前一次sql:

set autocommit=0;
  • 1

4、手动开启事务,执行sql之前,写一个:

begain;
sql语句1;
sql语句2;  
  • 1
  • 2
  • 3

5、手动开启事务的另一种方式:

start transaction;
sql语句1;
sql语句2;  
  • 1
  • 2
  • 3

6、回滚上一条sql语句

rollback
  • 1

可以连续多次回滚:

7、开启事务过后,可以手动确认sql语句,在sql语句执行后,在执行一个commit;就确认了,再无法rollback,即表示当前事务结束。

8、事务的特征ACID:

  • 1)A 原子性Atomicity :事务是最小的单位,不可以再分割,事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做;
  • 2)C 一致性Consistency :事务要求同一事务的sql语句必须同时成功或同时失败;
  • 3)I 隔离性Isolation :事务1和事务2之间是有隔离性的,不同事务之间不受影响;
  • 4)D 持久性Durability :事务一旦结束,就不可返回。

9、事务开启:

1)修改默认提交:
    set autocommit=0;
	begin;
	start transaction;

2)事务手动提交:
	commit;
	
3)事务手动回滚:
	rollback;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

10、事务的隔离性:
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

(1)read uncommitted;

  • 读未提交的。在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比
    其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

(2)read committed;

  • 读已提交的。这是大多数数据库系统的默认隔离级别(但 不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read), 因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

(3)repeatable read;

  • 可以重读。这是MySQL的默认事务隔离级别,它确保同一 事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

(4)serialiable;

  • 可串行化。这是最高的隔离级别,它通过强制事务排序,使之不可 能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

11、操作隔离级别:

1)查看隔离级别:
	mysql8.0	系统级别 select @@global.transaction_isolation
				会话级别 select @@transaction_isolation
				
	msyql5.0    系统级别 select @@global.tx_isolation
				会话级别 select @@tx_isolation
				
2)修改系统隔离级别:
	set global transaction isolation level read committed;
	set global transaction isolation level read uncommitted;
	
3)修改会话隔离级别:
	set session transaction isolation level read committed;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

推荐B站mysql教程,通俗易懂,点击观看




原文地址:访问原文地址
快照地址: 访问文章快照