PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » PHP中高级 » mysql存储过程学习笔记--事务控制
本页主题: mysql存储过程学习笔记--事务控制 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

meiwang12363

该用户目前不在线
级别: 中级程序员
精华: 1
发帖: 1069
威望: 0 点
金钱: 0 PYMB
贡献值: 0 点
在线时间:8(小时)
注册时间:2007-04-26
最后登录:2007-09-04

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



要使[url=javascript:;]mysql[/url]支持事务,表类型要用: 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定义了四种隔离级别, 允许应用根据实际需要选择合适的隔离级别馑闹指衾爰侗鸬暮迦缦拢?nbsp;

读"脏"数据
不可重复读
"幻象"读
未提交读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、 定义事务
要开启事务处理,有如下两个[url=javascript:;]方法[/url]:
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
顶端 Posted: 2007-07-15 15:43 | [楼 主]
PHP学会网 php培训网 PHP暑期培训 PHP寒假培训 PHP假期培训 » PHP中高级

时:11-22 18:06 Copyright © 2006 phpwhy.com 权
ICP05060669

曳息 -