mysql 事务机制

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中设置自动提交和不自动提交,没什么意义,也没什么效果。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值