多语言展示
当前在线:191今日阅读:26今日分享:39

Mysql事务控制语言

什么叫做事务?现在先假设这样一个场景:小明和小花是一对恋人;他们分处不同的城市;某天,iphone7出来了,小花想要一个,但肾以用完,需要向小明借钱5000,于是小明开始向小花汇款:不管小明通过什么途径(柜台,手机银行,atm机)汇款,都必然最终要执行如下2条语句:update  存款表 set  存款 = 存款-5000  where  账户=‘小明’;update  存款表 set  存款 = 存款+5000  where  账户=‘小花’;然后,小明汇款按下“确定”的时候,服务器在执行完第一条语句时突然“断电”(或其他网线被老鼠咬断。。。)。。。。于是,他们分手了。。。这里,出现问题的核心关键所在就是:该两条语句(2个事情),从逻辑上是必须都同时完成,这样才能保证数据的“一致性”,而这里却没有做到这一点。 事务,就是用来保证,这种需要“同时完成”的事情,能够实现同时完成的这种内部机制。“事务安全”,是一种数据库的功能,目前,mysql只有InnoDB和BDB引擎支持。 事务,只对数据的“增删改”可以进行控制——查询语句无所谓。事务的特点原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。
方法/步骤
1

事务的模式:是指,在mysql的安装之后的一种语句执行模式:自动提交模式:这是默认模式。这种模式,会让我们的sql,每一条语句,都会“当做”一个事务去执行。set autocommit = 1; //这是默认值 手动提交模式:这种模式,我们通常使用的增删改语句,并不会立即生效,而是需要在之后人为使用“commit”来提交才能生效。set autocommit = 0;举例:set  autocommit = 0;#设置为手动提交模式了,即非自动insert into .......update .....delete ......commit;  //提交上述多条增删改语句,此时才生效;否则就不会生效;

2

典型事务安全应用的代码模式基本模式:1,  start  transaction;  //也可以使用:begin;,表示“启动(开启/创建)一个事务”2,执行若干业务上需要的增删改语句;3,判断是否发生错误:如果错误:rollback; //回滚事务;这样之后,之前的多条语句,不管是否执行过,都“撤销”如果没有错:commit;//提交事务,也就是对之前的所有事情一次性进行提交确认——生效了 体现在php中,一般就这么写:1,mysql_query(“start  transaction;”); //启动一个事务2,执行若干语句:$result1 = mysql_query(“insert into .....”);$result2 = mysql_query(“update ....”);.......3,判断执行结果并决定是提交还是回滚:if( $result1  &&  $result2  && .... ){mysql_query(“commit”);}else{mysql_query(“rollback;”);} 说明:如果按这种“启动事务”的代码流程,则跟系统中的事务模式的设置无关了。 案例:

推荐信息