码迷,mamicode.com
首页 > 其他好文 > 详细

事务、触发器

时间:2019-01-05 16:40:38      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:action   独立   each   事件   bsp   成功   事务   不能   commit   

一、事务

什么是事务 

  通常,在此之前,我们说,一条语句使用一个分号(;)来结束,并得到执行。

  那么我们说,这个“一次性执行”的过程,可以称为“一个事务”。

  简单来说,“一条sql语句,就是一个事务”。

  则:

  数据库(自然包括mysql数据库)中的事务,是指,可以将“多条语句”的执行,当作“一条语句”来看到的一种内部机制。

  即:“事务”是一种可以保证“多条语句一次性执行完成”或“一条都不执行”的机制。

事务的特点

  原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;

    一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;

  隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样

  持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。

事务的基本实现流程

1,声明事务开始:start transaction

2, 设定多条要执行的具体语句,比如:insert, update, delete, select。。。其实就是执行,只是这些执行的语句,并不“生效”——其只是内存状态下的执行,而不是物理状态的执行。

3,判断是否需要执行该些语句:

if( 判断是否有错误){

  //执行——才针对执行了物理性改变——即生效。

  commit;

}

eslse{

  //回滚——不执行任何语句。

  rollback;

}

判断是否有错误通常分这两种环境:

(1),如果是cmd中,直接观察是否出错。

(2),如果是php程序中,那就需要使用 mysql_error()函数来判断是否有错。

 

例子:下面来使用事务完整转账这件事情(假设为cmd模式):

start  transaction;

#第一步:

  update  cunkuan  set 存款=存款-4000  where id=2;

#第一步做完,突然断电了?

#第二步:

  update  cunkuan  set 存款=存款+4000  where id=1;

则如果这两条语句都没有错误,就可以:

  commit;

但,如果其中发生了错误,则可以:

  rollback;

二、触发器

什么是触发器 

  mysql中的一种“一触即发”的机器(机制)。

  其实只是预先定义好的一段代码。该段代码无需人工调用,而是会在‘预计’好的某个情形下自动执行。

 

 触发器:

  不能返回数据;

  也不能有select语句;

  也没有参数,也不能调用,而是在触发的情况下自动调用(执行)。

形式:

  create  trigger  触发器名字  before(或after)  insert(或update或delete)  on  表名 for  each  row

  begin

  要执行的代码,语句块,编程环境,但这里也不能使用select语句。

  end;

 

  在触发器内部,其中有两个关键字具有特定含义和数据获取作用:

  new:代表新插入的一条数据,在insert事件的时候有效。

  old:代表旧的一条数据,在update或delete的时候有效。

 

事务、触发器

标签:action   独立   each   事件   bsp   成功   事务   不能   commit   

原文地址:https://www.cnblogs.com/tanchangsha/p/10224853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!