zoukankan      html  css  js  c++  java
  • mysql 基础操作笔记之一

    一、MYSQL 的事务处理机制

      参考博文 : MYSQL的事务处理功能   深入浅出mysql事务处理和锁机制    MySQL事务处理和锁定语句

     

      简单介绍一下事务:

      事务一般要满足4个条件

        原子性:事务在执行时,要做到“要么全做,要么不做”。也就是说不允许事务部分执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库的影响。

        一致性: 事务的操作应该使数据库从一个一致性的状态变到另一个一致性的状态。例如网上购物,只有既让商品出库,又让商品进入客户的购物篮才能构成事务。

        隔离性: 如果多个事务并发执行,应像各个事务独立执行一样。

        持久性: 一个成功执行的事务对数据库的作用是持久的,即使数据库因故障出错,也应该能够恢复。

      (PS)MYSQL 中只有 InnoDB 和 BDB 类型才能支持事务处理,其他类型不支持。

      mysql 的事务处理机制主要有两种:

      第一种是:以 BEGIN , ROLLBACK, COMMIT 来实现。建议使用这种方法来处理。

      step1:BEGIN 开始一个事务

      step2:执行mysql 语句,检测是否执行成功。

      step3:检测失败就执行 ROLLBACK ,进行事务回滚

      step4:按照事务需求,重复运行step2,3。

      step5:COMMIT 事务确认。

    // 下面代码在mysql控制台上测试运行过,没问题
    mysql> use test; Database changed mysql> CREATE TABLE `dbtest`( -> id int(4) -> ) TYPE=INNODB; Query OK, 0 rows affected, 1 warning (0.05 sec) mysql> select * from dbtest -> ; Empty set (0.01 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into dbtest value(5); Query OK, 1 row affected (0.00 sec) mysql> insert into dbtest value(6); Query OK, 1 row affected (0.00 sec) mysql> commit; Query OK, 0 rows affected (0.00 sec) mysql> select * from dbtest; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.00 sec) mysql> begin; Query OK, 0 rows affected (0.00 sec) mysql> insert into dbtest values(7); Query OK, 1 row affected (0.00 sec) mysql> rollback; Query OK, 0 rows affected (0.00 sec) mysql> select * from dbtest; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.00 sec) mysql>
    /**
     *  下面代码是在php上的类似实现
     */
    
    $handler=mysql_connect("localhost","root","");
    mysql_select_db("task");
    mysql_query("BEGIN");//开始事务定义
    mysql_query('START TRANSACTION');
    if(!mysql_query("insert into trans (id) values('2')"))
    {
    mysql_query("ROOLBACK");//判断当执行失败时回滚
    }
    if(!mysql_query("insert into trans (id) values('4')"))
    {
    mysql_query("ROOLBACK");//判断执行失败回滚
    }
    mysql_query("COMMIT");//执行事务mysql_close($handler);

      第二种是直接用 SET 来改变mysql 的自动提交模式

      mysql 是默认自动提交的,即我们提交一个query,它就直接执行。我们可以通过

      SET AUTOCOMMIT = 0 ;   禁止自动提交

      SET AUTOCOMMIT = 1 ;   开启自动提交

      来实现事务处理。

      要注意的是: 用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!所以推荐用第一种方法。

  • 相关阅读:
    HTML常用标签1
    mysql 多对多拆分成 一对多(学生,选修课,成绩)
    JDBC工具包使用
    类反射,用于JDBC
    JDBC基础语句使用
    关于线程等待、线程唤醒方法的引入
    synchronized站点抢票同步例题
    python-装饰器
    jwt, token, session和cookies
    miniapp之登录、授权和支付
  • 原文地址:https://www.cnblogs.com/zjfazc/p/2938329.html
Copyright © 2011-2022 走看看