mysql 存储过程控制事务_mysql存储过程学习笔记--事务控制

要使mysql支持事务,表类型要用: InnoDB

1、 隔离级别

SET TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED |REPEATABLE READ | SERIALIZABLE}

默认为:REPEATABLE READ

在SQL99中,为了实现事务的完全隔离,定义了三种必须避免的现象:

1、读"脏"数据(dirty read):即事务在运行中读到了其它事务未提交的数据。

2、不可重复读(unrepeatable read):即事务在运行中再次读取同一数据时,可发现其它事务的更新。

3、"幻象"读(phantom read):即事务在运行中再次执行同一查询时,发现其它事务的更新。

只有避免上面三种现象,才能实现真正意义上的隔离,或者称是可串行的。但是,此时事务之间因为冲突而等待的机会非常高,系统的性能可能难以达到预期的目标。 为了实现隔离性与系统性能之间的平衡,SQL99定义了四种隔离级别, 允许应用根据实际需要选择合适的隔离级别,这四种隔离级别的含义如下:

读"脏"数据

不可重复读

"幻象"读

未提交读READ UNCOMMITTED

N

N

N

提交读READ COMMITTED

Y

N

N

可重复读REPEATABLE READ

Y

Y

N

可串行SERIALIZABLE

Y

Y

Y

其中"N"表示在这种隔离级别下,对应的现象不可避免,而"Y"则 表示可以避免。

2、 事务语句

START TRANSACTION

开始一个事务,如果已存在一个事务,会先立即commit.另外,autocommit属性会被设为0,直到事务结束

COMMIT

提交所有数据,释放锁

ROLLBACK

回滚事务

SAVEPOINT savepoint_name

设点存盘点

ROLLBACK TO SAVEPOINT savepoint_name

回滚至savepoint_name

SET TRANSACTION

设置隔离级别(SET TRANSACTION ISOLATION LEVEL)

LOCK TABLES

锁定表,此操作会导致当前打开的事务立即开关闭,所以应在此之前,执行commit或rollback

3、 定义事务

要开启事务处理,有如下两个方法:

a、 将autocommit设为0

b、 使用START TRANACTION语句(建议使用)

注:以下语句会导致即时commit当前事务

ALTER FUNCTION ALTER PROCEDURE ALTER TABLE

BEGIN CREATE DATABASE CREATE FUNCTION

CREATE INDEX CREATE PROCEDURE CREATE TABLE

DROP DATABASE DROP FUNCTION DROP INDEX

DROP PROCEDURE DROP TABLE UNLOCK TABLES

LOAD MASTER DATA LOCK TABLES RENAME TABLE

trUNCATE TABLE SET AUTOCOMMIT=1 START TRANSACTION

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值