事物

数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎

修改存储引擎语法:ALTER TABLE  `表名`  ENGINE = 储存引擎;

 

MySQL中事务处理

什么是事务

事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:网上转账就是典型的要用事务来处理,用以保证数据的一致性。

事务和锁

当执行事务操作时(dml语句),mysql会在被作用的表上加锁,防止其它用户改表表的结构.这里对我们用户来讲是非常重要的。

提交事务

当执使用commit语句可以提交事务.当执行了commit语句子后,会确认事务的变化、结束事务、删除保存点、释放锁,当使用commit语句结束事务子后,其它会话将可以查看到事务变化后的新数据

回退事务

在介绍回退事务前,我们先介绍一下保存点(savepoint)的概念和作用.保存点是事务中的一点.用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点.

当执行rollback时,通过指定保存点可以回退到指定的点。


事务ACID特性

原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。

数据库事务的不可再分的原则即为原子性。

组成事务的所有查询必须:

要么全部执行,要么全部取消(就像上面的银行例子)。

一致性(Consistency):指数据的规则,在事务前/后应保持一致

隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.

持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消


事务隔离级别

多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。

 如果不考虑隔离性,可能会引发如下问题:

1. 脏读

2. 不可重复读

3. 幻读(虚读)

事务隔离级别

概念:隔离级别定义了事务与事务之间的隔离程度。

ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而已,不同的数据库在实现时有所不同)

隔离级别

脏读

不可重复读

幻读

读未提交(Read uncommitted

V

V

V

读已提交(Read committed

x

V

V

可重复读(Repeatable read

x

x

V

可串行化(Serializable

x

x

x

V 可能出现 x 不会出现

 

 

 

 

 

脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

脏读(read committe):在RC的隔离级别下,不会出现脏读的问题。事务A对数据做的修改,提交之后会对事务B可见。在RC的隔离级别下,会出现不可重复读的问题。这个隔离级别是许多数据库的默认隔离级别。

不可重复读(nonrepeatable read)同一查询同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。

幻读(phantom read)同一查询同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。

 

 1.查看当前会话隔离级别

 select @@tx_isolation;

 2.查看系统当前隔离级别

 select @@global.tx_isolation;

 3.设置当前会话隔离级别

 set session transaction isolation level repeatable read;

 4.设置系统当前隔离级别

 set global transaction isolation level repeatable read;

 5. mysql 默认的事务隔离级别是 repeatable read ,一般情况下,没有特殊要求,没有必要修改(因为该级别可以满足绝大部分项目需求


隐式提交

除了 COMMIT 命令外,下列命令也会自动结束当前事务:

 ALTER TABLE, BEGIN, CREATE DATABASE,  CREATE INDEX, CREATE PROCEDURE, CREATE TABLE,  CREATE FUNCTION, ALTER FUNCTION, ALTER PROCEDURE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE, UNLOCK TABLES.


事务的应用场景。

mysql支持的存储引擎Innodb。

事务的ACID(原子性、一致性、隔离性、持久性)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值