首页 > 数据库技术 > 详细

MySQL数据库的事务

时间:2021-07-22 11:12:00      阅读:19      评论:0      收藏:0      [点我收藏+]

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();
}

 

MySQL数据库的事务

原文:https://www.cnblogs.com/wenxuehai/p/15042188.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!