您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

MySQL事务处理及锁定_MySQL

2025/2/19 0:11:45发布17次查看
bitscn.com
mysql事务处理及锁定
事务处理(transaction)是将多个更新命令作为一个整体来执行,从而保证数据整合性的机制。
存储引擎(storage engine)
mysql 有一个重要特征,即:可替换存储引擎构架(pluggable storage engine architecture)
mysql 的功能分为 2 个部分,
外层部分:负责完成与客户端的连接、对 sql 语句进行事前检查等。
内层部分:存储引擎部分,负责接收外层的数据操作指示,完成实际的数据输入输出以及文件操作。
mysql 提供了多种存储引擎,用户可自由选择(也可以给不同的表,选择不同的存储引擎)
用户可以任意选择存储引擎,这是 mysql 独有的特征。
myisam :默认的高速引擎,不支持事务处理
innodb :支持行锁定,以及事务处理,比 myisam 的处理速度稍慢
isam :myisam 引擎的前身。mysql 5.0 以后,不再标准安装
merge : 该引擎,会将多个 myisam 类型的表,作为一个表来处理
memory, heap : 只在内存上保存数据
falcon :一种新的存储引擎,支持事务处理
archive: 将数据压缩后保存 (只能进行 insert / select 操作)
csv : 以csv 形式保存数据(应用于跨平台数据交换)
my.ini 中, 设置:default-storage-engine=innodb
才能使用 innodb 引擎,来支持事务处理
[sql] 
show create table customer;  
show create table customer/g
[sql] 
alter table customer engine=myisam;
为什么需要事务处理?
例如:甲,向乙转账1 万元。
需要2个操作,甲的账户减少 1万,乙的账户增加 1万。
如果,甲账户减少 1万之后,乙账户却没有相应增加1万,则发生错误。
为避免此类情况,将2个操作作为一个事务来处理,2个操作都成功,则事务结束,进行提交(commit)。
如果 其中1个操作失败,则强制返回最初的状态,即:回滚(rollback)
这样,能保证,要么2个操作都成功,要么2个操作都失败。
执行rollback 等事务操作,要确保当前的数据库引擎是支持事务操作的。如:innodb
[sql] 
begin; -- 或者 start transaction  
delete from customer;  
select * from customer;  
rollback;
自动提交的功能,默认是开启的。
[sql] 
select @@autocommit;  
set autocommit=0; --关闭自动提交功能  
select * from customer;  
delete from customer;  
rollback; -- 关闭自动提交,无需 begin 操作,也能使用 rollback  
/* 这种情况下,如果不执行 commit 操作,则所有更新不会反映到数据库中 */
部分回滚
[sql] 
begin;  
insert into customer values('t0001', '王二', '1980-10-21', 1);  
savepoint sp;  
insert into customer values('t0002', '田三', '1985-10-21', 1);  
select * from customer;  
rollback to savepoint sp;  
select * from customer;  
rollback;  
select * from customer;
以下 sql 命令,执行后会被自动提交。它们不在事务处理的控制范围之内。
[sql] 
drop database;  
drop table;  
drop;  
alter table;
多用户同时读取数据库时候,为防止冲突,可使用锁定(lock)、解锁(unlock)
锁定分为:共享锁定(shared lock)、排他锁定(exclusive lock)
共享锁定,有时也称为,读取锁定。当用户参照数据时,将对象数据变为只读形式。
排他锁定,也称为,写入锁定 或 独占锁定。
在执行 insert、update、delete 等操作时,使用该锁定。其他进程、事务,一律不能读取、更新、写入。
锁定粒度:记录(行)、表、数据库。
锁定提升机制:当行单位粒度的锁定,大量产生时,数据库将锁定粒度自动向上提升(比如,提升成表粒度的锁定,或者数据库粒度的锁定)
分离水平:事务处理之间的影响程度(同时运行时互相影响的机制)
分离水平有 4 种: 
read uncommitted :支持, 非提交读取、不可重复读取、幻象读取
read committed :支持,不可重复读取、幻象读取
repeatable read :支持,幻象读取
serializable :都不支持
非提交读取(脏读 dirty read):能从别的事务处理中,读取到尚未提交的更新数据,只发生在 read uncommitted 分离水平。不推荐使用
[sql] 
set session transaction isolation level read uncommitted;
不可重复读取(non-repeatable read):某一事务处理中,由于其他事务处理的更新操作,导致,对同一数据的多次读取,结果不同。
发生在 read commited 以下的分离水平
幻象读取(phantom read):某一事务处理中,对同一数据进行多次读取时,由于其他事务处理的插入、删除操作,
使得结果中,出现了第一读取时,不存在的数据,或者,第一次读取时,存在的数据消失了,的现象。
死锁(dead lock)两个不同的事务处理,在相互等待对方释放锁定,永远也不可能解除锁定的一种状态。
事务处理的机制,简单的说,就是,留下更新日志。
与事务处理相关的日志,分为2个类型:undo 日志、 redo 日志
undo 日志,又称:回滚段(rollback segment)
redo 日志,又称:事务处理日志、或 日志。
bitscn.com
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product