zoukankan      html  css  js  c++  java
  • MySQL数据库的事务

    1、MySQL数据库的事务

    在MySQL数据库中,事务默认是会自动提交的,也就是说,如果没有用 begin ... commit 来显式提交事务的话,MySQL 会认为每一条SQL语句都是一个事务,也就是每一条SQL语句都会自动提交。另外,Oracle数据库默认是不会自动提交事务的,也就是必须得显式地commit,SQL才会生效。

    我们可以通过下面的语句来查询是否自动提交事务:

    SELECT @@autocommit;   -- 结果为1表示自动提交,0表示不是自动提交

    查询结果:

    可以看到默认是为自动提交的。

    也可以通过下面语句来设置不自动提交事务

    SET @@autocommit = 0;

    当设置为不自动提交事务后,每一条 SQL 语句都需要显式地使用 commit 来提交才行,不然的话不会持久性地作用到数据库中。

    UPDATE websites SET websites.alexa = 444 WHERE websites.id = 1;
    COMMIT;  -- 当设置为不自动提交时,必须得显式地commit,SQL才会提交,起持久性作用。否则执行上面的update语句数据库也不会被更新

     2、处理事务

    在 MYSQL 中事务处理主要有两种方法:

    1)用 BEGIN, ROLLBACK, COMMIT来实现

    • BEGIN 开始一个事务
    • ROLLBACK 事务回滚
    • COMMIT 事务确认
    BEGIN;  -- MySQL中也可以用START TRANSACTION
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;
    COMMIT;

    2)直接用 SET 来改变 MySQL 的自动提交模式。因为在MySQL中,默认自动提交事务,也就是任意一条SQL语句都会被当做是一个事务,并且自动提交,所以如果不使用 begin .. commit 的话,在MySQL中需要将自动提交关闭掉。

    • SET AUTOCOMMIT=0 禁止自动提交
    • SET AUTOCOMMIT=1 开启自动提交
    Connection conn = openConnection();
    try {
        // 关闭自动提交:
        conn.setAutoCommit(false);
        // 执行多条SQL语句:
        insert(); update(); delete();
        // 提交事务:
        conn.commit();
    } catch (SQLException e) {
        // 回滚事务:
        conn.rollback();
    } finally {
        conn.setAutoCommit(true);  //最后恢复至自动提交
        conn.close();
    }
  • 相关阅读:
    spring 09-Spring框架基于QuartZ实现调度任务
    spring 08-Spring框架Resource资源注入
    spring 07-Spring框架Resource读取不同资源
    spring 06-Spring框架基于Annotation的依赖注入配置
    html 默认跳转
    poi 设置样式
    支付宝扫码支付回调验证签名
    构造器初始化
    cxf webservice
    CSS3 border-image 属性
  • 原文地址:https://www.cnblogs.com/wenxuehai/p/15042188.html
Copyright © 2011-2022 走看看