mysql事物机制
一、启动方式
1、使用 service 启动:service mysqld start
2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start
3、使用 safe_mysqld 启动:safe_mysqld&
二、停止
1、使用 service 启动:service mysqld stop
2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop
3、mysqladmin shutdown
三、重启
1、使用 service 启动:service mysqld restart
2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart
四、设置事务提交方式
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
show variables like 'autocommit'
SET GLOBAL init_connect=’SET autocommit=0′;
五、mysql事务测试
MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关:
show create table tablename; 可以查看表的存储引擎
alter table tablename type=InnoDB; 更改表的存储引擎
InnoDB:不支持事务,用于只读程序提高性能
MyISAM:支持ACID事务、行级锁、并发
当然还有其他的存储引擎类型,目前的应用中只使用了这两种类型。
-----------------------------------------------------------------------
场景1:
1 tx.begin(); // 启动事务
2 insert table1; // 插入数据到table1,table1 的存储引擎是MyISAM
3 insert table2; // 插入数据到table2,table2 的存储引擎是InnoDB
4 tx.commit(); // 提交事务
经测:
1、4还未执行的时候,2就已经入库了,3未入库,4执行后,3入库。
2、2执行了,3异常了,2未回滚。
-----------------------------------------------------------------------
-----------------------------------------------------------------------
场景2:
设置事务非自动提交。
代码1:
insert table1; // table1 存储引擎 MyISAM
代码2:
tx.begin();
insert table1; // table1 存储引擎 MyISAM
tx.commit();
代码2加事务无效果,未执行tx.commit() 就已经入库了
table2存储类型 InnoDB;
代码1
insert table2;//
代码2
tx.begin();
insert table2; // 直接入库,
tx.commit();
代码1直接入库,代码2执行tx.commit()后入库
-----------------------------------------------------------------------
-----------------------------------------------------------------------
场景3:
设置自动提交
InnoDB存储类型
insert table2; // 直接提交
tx.begin();
insert table2; // 待到tx.commit()提交,才入库。
insert table3; // 带到tx.commit()提交,才入库。
tx.commit();
-------------------------------------------------------------------------
可以看出:
存储引擎为MyISAM,加事务不加事务无效果,MyISAM是不支持事务的。
存储引擎为InnoDB,代码没有启动事务,每一条sql语句会启动一个事务,若代码控制了事务,则由代码控制()。
存储引擎为InnoDB,设置是自动提交,代码中加入了事务控制,则由事务控制,没有达到自动提交的效果。
tx.begin();
insert;
insert;
insert;
tx.commit();
btw:感觉mysql中设置自动提交和不自动提交,没什么意义,也没什么效果。
分享到:
2011-04-01 13:52
浏览 1417
分类:数据库
评论