精华内容
下载资源
问答
  • autocommit

    千次阅读 2017-12-10 13:38:07
    autocommit 一、概念 事务自动提交设置,默认为1,即除非显示声明一个事务的开始,否则每一个查询都会被当做独立的事务被处理 默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条...

    autocommit

    一、概念

    • 事务自动提交设置,默认为1,即除非显示声明一个事务的开始,否则每一个查询都会被当做独立的事务被处理
    • 默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果执行失败则隐式的回滚事务
    • 关闭自动提交的原因,事务作为一个独立处理最小单元,往往需要处理一系列连续的数据操作,这些操作被视为一个整体,需要同时成功或同时失败,而不能其中某个操作成功;比如:A汇款给B,B接收到歀;即 A的账户扣款,而B的账户增加;必须同时成功或同时失败;如果成功则commit否则整体回滚;批量数据提交,如果提交1000条数据操作,需要处理1000次提交commit,而如果关闭autocommit等1000条数据处理完毕后统一一次提交
    • 存储引擎需支持事务,如InnoDB,而MyISAM不支持事务
    • 事务是否开启:如果没有显示的开启事务,autocommit 才会生效;
    // 示例
    // descrpiton:在显示开启事务的情况下,无论是否开启自动提交,下面示例均会发生
    // 结论:在显示开启事务的情况下,autocommit 不生效
    // console 1 
    mysql> begin ;
    Query OK, 0 rows affected
    mysql> select * from t_order ;
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  1 | 订单1 | DD_000000001 |      1 |
    |  2 | 订单2 | DD_000000002 |      2 |
    |  3 | 订单3 | DD_000000003 |      3 |
    +----+-------+--------------+--------+
    mysql> update t_order set order_no = "DD_000000033" where id = 3 ;
    Query OK, 1 row affected
    
    mysql> select * from t_order ; // 修改结果当前会话中的当前事务可见
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  1 | 订单1 | DD_000000001 |      1 |
    |  2 | 订单2 | DD_000000002 |      2 |
    |  3 | 订单3 | DD_000000033 |      3 |
    +----+-------+--------------+--------+
    3 rows in set
    
    // console 2 
    mysql> select * from t_order ; // 不可见
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  1 | 订单1 | DD_000000001 |      1 |
    |  2 | 订单2 | DD_000000002 |      2 |
    |  3 | 订单3 | DD_000000003 |      3 |
    +----+-------+--------------+--------+
    3 rows in set
    
    // console 1 
    mysql> commit ;
    Query OK, 0 rows affected
    // console 2 
    mysql> select * from t_order ;
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  1 | 订单1 | DD_000000001 |      1 |
    |  2 | 订单2 | DD_000000002 |      2 |
    |  3 | 订单3 | DD_000000033 |      3 |
    +----+-------+--------------+--------+
    3 rows in set
    
    

    二、基本操作

    // 查询
    mysql> SELECT @@autocommit ;
    +--------------+
    | @@autocommit |
    +--------------+
    |            1 |
    +--------------+
    1 row in set
    
    
    mysql> SHOW VARIABLES LIKE "%AUTOCOMMIT%";
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | ON    |
    +---------------+-------+
    1 row in set
    
    // 修改
    mysql> SET autocommit = 0 ;
    Query OK, 0 rows affected
    // 在当前session关闭autocommit:
    mysql> set @@session.autocommit=0;
    Query OK, 0 rows affected (0.00 sec)
    // 在global级别关闭autocommit:
    mysql> set @@global.autocommit=0;
    Query OK, 0 rows affected (0.01 sec)

    三、产生的问题

    示例:

    // 系统准备
    // MySQL:Server version: 5.7.17 ; 
    // 查询MySQL版本:CMD 命令,输入mysql,回车进入命令行,根据系统提示,即可查看当前安装版本
    // 数据连接工具:Navicat for MySQL
    // F6命令打开两个console窗口,模拟两个不同的connection
    
    
    ----------
    
    // 示例
    // 1.在 autocommit = 1 ; 时,下面示例运行正常。即 console 1 与 console 2 中查询结果一致;
    // 2.在 autocommit = 0 ; 时,在  console 1 中对数据进行修改,在 console 1 中 查询到的数据时更新后的数据;但在 console 2 中读取到的数据依然是旧的;
    // T1 时间 console 1 
    mysql> SET AUTOCOMMIT = 0 ;
    Query OK, 0 rows affected
    
    mysql> UPDATE T_ORDER SET STATUS = 4 WHERE ID = 3 ;
    Query OK, 1 row affected
    
    // T2 时间 console 2 
    mysql> SET AUTOCOMMIT = 0 ;
    Query OK, 0 rows affected
    
    mysql> SELECT * FROM T_ORDER WHERE ID = 3 ;
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  3 | 订单3 | DD_000000003 |      3 |
    +----+-------+--------------+--------+
    1 row in set
    
    // T3 时间 console 1
    mysql> SELECT * FROM T_ORDER WHERE ID = 3 ;
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  3 | 订单3 | DD_000000003 |      4 |
    +----+-------+--------------+--------+
    1 row in set
    
    mysql> COMMIT ;
    Query OK, 0 rows affected
    // T4 时间 console 2
    mysql> SELECT * FROM T_ORDER WHERE ID = 3 ;
    // 在 console 1 提交事务后查询结果依旧没有改变
    +----+-------+--------------+--------+
    | id | name  | order_no     | status |
    +----+-------+--------------+--------+
    |  3 | 订单3 | DD_000000003 |      3 |
    +----+-------+--------------+--------+
    1 row in set
    
    // T5 时间 console 2 
    // 查询到最新数据的方式
    // 1.执行 commit ; 当前事务结束;否则再次查询仍然与上次的查询在一个事务中,查询是上次查询结果的快照; 
    // 2.SET autocommit = 1 ; 每次操作都是一个独立的原子性的操作,自动提交,每次都是一个独立的事务

    结论:

    • 使用时应注意,在需要关闭自动提交的操作前将 autocommit = 0 操作完毕后,再将其改为 autocommit = 1 ;
    • 在关闭AutoCommit的条件下,console 1 在T1和T2两个时间点执行的SQL语句其实在一个事务里,因此每次读到的其实只是一个快照,即一致性非阻塞读:InnoDB通过MVCC机制表示数据库某一时刻的查询快照,查询可以看该时刻之前提交的事务所做的改变,但是不能看到该时刻之后或者未提交事务所做的改变。但是,查询可以看到同一事务中之前语句所做的改变

    未起作用

    • 连接mysql用户的权限不能大于启动mysql的用户的权限,不然init_connect=’SET autocommit=0’根本不会启作用,也不会报任何错误
    • 显示开启事务

    注意:

    1、不能将”关闭autocommit”作为缺省设置,否则在 innodb 表上执行的查询操作也将因为没有执行 commit 或者 rollback 而一直锁表!因此只能在需要时局部关闭 autocommit,并在操作完成后开启 autocommit

    2、连接mysql用户的权限不能大于启动mysql的用户的权限,不然init_connect=’SET autocommit=0’根本不会启作用,也不会报任何错误

    If a user has SUPER privilege, init_connect will not execute,(otherwise if init_connect will a wrong query no one can connect to server).
    Note, if init_connect is a wrong query, the connection is closing without any errors and next command will clause ‘lost connection’ error.

    参考资料

    展开全文
  • autoCommit 用于刷commit记录,可以刷过去几年的commit以及未来的commit, 一键帮你把github首页的绿色格子填满。 它是一个VScode插件可以自由控制commit日期(提交过去几年的commit以及未来的commit) 它可以自由控制...
  • Oracle sqlplus参数autocommit(自动提交)的设置 在数据库的插入、删除和修改操作时,只有当事务...

    Oracle sqlplus参数autocommit(自动提交)的设置





    在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在Oracle数据库中,在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。因为Oracle数据库的默认事务隔离级别是提交读(Read Committed)。提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。

    (1) 显式提交

    用COMMIT命令直接完成的提交为显式提交。其格式为:

    SQL>COMMIT;

    (2) 隐式提交

    用SQL命令间接完成的提交为隐式提交。这些命令是:

    ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

    (3) 自动提交

    若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:

    SQL>SET AUTOCOMMIT ON;

     

    官网:

    https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve040.htm#SQPUG060

    http://blog.itpub.net/26736162/viewspace-2121072/

     

    需要注意的是,无论AUTOCOMMIT设置为何值,当退出SQL*Plus时,当前会话所有的DML操作所改变的数据都会被提交。

     

    SYS@PROD1> set auto  

    SP2-0281: autocommit missing set option

    Usage: SET AUTO[COMMIT] { OFF | ON | IMM[EDIATE] | n }

    SYS@PROD1> show auto

    autocommit OFF

    SCOTT@PROD1>  set autocommit on

    SCOTT@PROD1> show autocommit

    autocommit IMMEDIATE

    OFF为默认值,表示关闭自动提交;ON和IMM都表示打开自动提交,二者没有区别;n表示成功执行n条DML操作后再自动提交。n不能小于0,也不能大于20亿(2,000,000,000)。注意,这里不是一个DML语句所影响的行数,而是DML语句的个数。

    实验过程如下:

    1、数据库版本

    SQL> select * from v$version where rownum=1;

     

    BANNER

    --------------------------------------------------------------------------------

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

     

     

    2、查看sqlplus的控制是否自动提交的参数autocommit。无论AUTOCOMMIT设置为何值,当退出SQL*Plus时,当前会话所有的DML操作所改变的数据都会被提交。

    SQL> show user

    USER is "SCOTT"

     

     

    Usage: SET AUTO[COMMIT] { OFF | ON | IMM[EDIATE] | n }

    SQL>

     

    SQL> show autocommit

    autocommit OFF

     

    3、产生DML不提交

    SQL> create table t_commit_lhr(a number);

     

    SQL> insert into t_commit_lhr values(1);

     

    1 row created.

     

    退出当前会话

    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    4,若中途退出未提交DML的SQLPLUS会话,则自动提交DML事务

    [oracle@seconary ~]$ sqlplus scott/system

     

    SQL*Plus: Release 11.2.0.1.0 Production on Sat Oct 17 21:45:13 2015

     

    Copyright (c) 1982, 2009, Oracle.  All rights reserved.

     

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL> select * from t_commit_lhr;

     

             A

    ----------

             1

     

     

    5,调整自动提交为提交,可见autocommit为on,即不用显式再发起命令commit

    SQL> show autocommit

    autocommit OFF

     

    SQL> set autocommit on

    SQL> show autocommit

    autocommit IMMEDIATE

     

     

    SQL> select * from t_commit_lhr;

     

    no rows selected

     

    SQL> insert into t_commit_lhr values(2);

     

    1 row created.

    Commit complete.

     

    SQL> host

    [oracle@seconary ~]$ sqlplus scott/system

     

     

    SQL*Plus: Release 11.2.0.1.0 Production on Sat Oct 17 21:53:55 2015

     

     

    Copyright (c) 1982, 2009, Oracle.  All rights reserved.

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

     

    SQL> select * from t_commit_lhr;

     

     

             A

    ----------

             1

             2

     

    连续在当前SQLPLUS会话中运行5个DML语句后会自动提交

    SQL> set autocommit 5

    SQL> show autocommit

    AUTOCOMMIT ON for every 5 DML statements

     

     

    [oracle@seconary ~]$ sqlplus scott/system

     

    SQL> truncate table t_commit_lhr;

     

    Table truncated.

     

     

    SQL> select * from t_commit_lhr;

     

    no rows selected

     

     

    SQL> insert into t_commit_lhr select level from dual connect by level<=6;

     

     

    6 rows created.

     

     

    SQL> host

     

    [oracle@seconary ~]$ sqlplus scott/system

     

     

    SQL*Plus: Release 11.2.0.1.0 Production on Sat Oct 17 21:58:41 2015

     

     

    Copyright (c) 1982, 2009, Oracle.  All rights reserved.

     

     

     

     

    Connected to:

    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

     

    SQL> select * from t_commit_lhr;

     

    no rows selected

     

    SQL> insert into t_commit_lhr values(1);

     

    1 row created.

     

    SQL> insert into t_commit_lhr values(1);

     

    1 row created.

     

    SQL> insert into t_commit_lhr values(1);

     

    1 row created.

     

    SQL> insert into t_commit_lhr values(1);

     

    1 row created.

     

    SQL> insert into t_commit_lhr values(1);

     

    1 row created.

     

    Commit complete.

    SQL>     

    第5条insert执行完毕后出现Commit complete.提示。

     

    & 说明:

    有关Oracle AUTOCOMMIT(自动提交)的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2149538/

     






    SET AUTO[COMMIT]{ON | OFF | IMM[EDIATE] | n}

    Controls when Oracle Database commits pending changes to the database after SQL or PL/SQL commands.

    ON commits pending changes to the database after Oracle Database executes each successful INSERT, UPDATE, or DELETE, or PL/SQL block. OFF suppresses automatic committing so that you must commit changes manually (for example, with the SQL command COMMIT). IMMEDIATE functions in the same manner as ON. n commits pending changes to the database after Oracle Database executes n successful SQL INSERT, UPDATE, or DELETE commands, or PL/SQL blocks. n cannot be less than zero or greater than 2,000,000,000. The statement counter is reset to zero after successful completion of n INSERT, UPDATE or DELETE commands or PL/SQL blocks, a commit, a rollback, or a SET AUTOCOMMIT command.

    SET AUTOCOMMIT does not alter the commit behavior when SQL*Plus exits. Any uncommitted data is committed by default.

    Note:

    For this feature, a PL/SQL block is considered one transaction, regardless of the actual number of SQL commands contained within it.

    Saving Changes to the Database Automatically

    You can specify changes you wish to make to the information stored in the database using the SQL Database Manipulation Language (DML) commands UPDATE, INSERT, and DELETE—which can be used independently or within a PL/SQL block. These changes are not made permanent until you enter a SQL COMMIT command or a SQL Database Control Language (DCL) or Database Definition Language (DDL) command (such as CREATE TABLE), or use the autocommit feature. The SQL*Plus autocommit feature causes pending changes to be committed after a specified number of successful SQL DML transactions. (A SQL DML transaction is either an UPDATE, INSERT, or DELETE command, or a PL/SQL block.)

    You control the autocommit feature with the SQL*Plus AUTOCOMMIT system variable. Regardless of the AUTOCOMMIT setting, changes are committed when you exit SQL*Plus successfully.

    Example 4-5 Turning Autocommit On

    To turn the autocommit feature on, enter

    SET AUTOCOMMIT ON
    

    Alternatively, you can enter the following to turn the autocommit feature on:

    SET AUTOCOMMIT IMMEDIATE
    

    Until you change the setting of AUTOCOMMIT, SQL*Plus automatically commits changes from each SQL DML command that specifies changes to the database. After each autocommit, SQL*Plus displays the following message:

    COMMIT COMPLETE
    

    When the autocommit feature is turned on, you cannot roll back changes to the database.

    To commit changes to the database after a number of SQL DML commands, for example, 10, enter

    SET AUTOCOMMIT 10
    

    SQL*Plus counts SQL DML commands as they are executed and commits the changes after each 10th SQL DML command.

    Note:

    For this feature, a PL/SQL block is regarded as one transaction, regardless of the actual number of SQL commands contained within it.

    To turn the autocommit feature off again, enter the following command:

    SET AUTOCOMMIT OFF
    

    To confirm that AUTOCOMMIT is now set to OFF, enter the following SHOW command:

    SHOW AUTOCOMMIT
    
    AUTOCOMMIT OFF
    

    See SET AUTO[COMMIT]{ON | OFF | IMM[EDIATE] | n} for more information.






    About Me

    .............................................................................................................................................

    ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

    ● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

    ● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

    ● 本文博客园地址:http://www.cnblogs.com/lhrbest

    ● 本文pdf版、个人简介及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

    ● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

    ● DBA宝典今日头条号地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

    .............................................................................................................................................

    ● QQ群号:230161599(满)、618766405

    ● 微信群:可加我微信,我拉大家进群,非诚勿扰

    ● 联系我请加QQ好友646634621,注明添加缘由

    ● 于 2018-01-01 06:00 ~ 2018-01-31 24:00 在魔都完成

    ● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

    ● 版权所有,欢迎分享本文,转载请保留出处

    .............................................................................................................................................

    小麦苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

    小麦苗出版的数据库类丛书http://blog.itpub.net/26736162/viewspace-2142121/

    好消息:小麦苗OCP、OCM开班啦,详情请点击http://blog.itpub.net/26736162/viewspace-2148098/

    .............................................................................................................................................

    使用微信客户端扫描下面的二维码来关注小麦苗的微信公众号(xiaomaimiaolhr)及QQ群(DBA宝典),学习最实用的数据库技术。

       小麦苗的微信公众号      小麦苗的DBA宝典QQ群2     《DBA笔试面宝典》读者群       小麦苗的微店

    .............................................................................................................................................

    ico_mailme_02.png
    DBA笔试面试讲解群
    《DBA宝典》读者群 欢迎与我联系



    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2149538/,如需转载,请注明出处,否则将追究法律责任。

    展开全文
  • autocommit 对于熟悉Oracle数据库的SQL * Plus的人来说,当将其引入PostgreSQL数据库的psql时,一个潜在的惊喜可能是psql的默认启用的autocommit 。 这篇文章概述了psql对autocommit的处理以及一些相关的细微差别 ...

    autocommit

    对于熟悉Oracle数据库SQL * Plus的人来说,当将其引入PostgreSQL数据库psql时,一个潜在的惊喜可能是psql的默认启用的autocommit 。 这篇文章概述了psql对autocommit的处理以及一些相关的细微差别

    默认情况下, OracleSQL * Plus命令行工具不会自动提交DML语句 ,并且操作员必须作为事务的一部分显式提交这些语句(或从会话退出而不回滚)。 因此,当PostgreSQL及其psql命令行工具的情况恰恰相反时,熟悉使用SQL * Plus与Oracle数据库一起工作的开发人员和管理员可能会有些惊讶。 默认情况下,自动提交在psql处于打开状态,这意味着每条语句(包括INSERTUPDATEDELETE语句之类的DML语句)在提交后都会自动提交。

    PostgreSQLpsql默认启用自动提交的结果之一是不需要COMMIT语句。 当尝试commit; 在启用了自动提交的psql ,显示警告级别的消息“ 没有正在进行的事务 ”。 下一个屏幕快照对此进行了演示。

    20160909-theresno处理正在进行中

    本文的其余部分着眼于如何关闭psql中所有操作语句的自动提交。

    覆盖psql的autocommit默认值的一种经常被引用的方法是使用BEGIN关键字显式开始事务,然后psql在提供显式提交之前不会提交。 但是,随着时间的流逝,这可能会变得有些乏味,幸运的是PostgreSQLpsql提供了一种方便的方法来配置psql以禁用自动提交功能。

    在介绍用于在psql禁用自动提交的简便方法之前,我将在此指出,不要混淆ECPG的建议( C中的嵌入式SQL )。 使用ECPG时,适用于ECPG的PostgreSQL文档的“ SET AUTOCOMMIT ”部分。 尽管这仅适用于ECPG而不适用于psql ,但可能很容易不知道,因为Google搜索“ psql autocommit”的第一个响应就是此ECPG特定的手册页。 特定于ECPG的手册页指出该命令看起来像“ SET AUTOCOMMIT { = | TO } { ON | OFF } SET AUTOCOMMIT { = | TO } { ON | OFF } SET AUTOCOMMIT { = | TO } { ON | OFF } ”,并添加“默认情况下,嵌入式SQL程序处于自动提交模式,因此需要在需要时显式发出COMMIT。” 这就像OracleSQL * Plus,而不是默认情况下psql行为。

    幸运的是,在psql禁用自动提交非常容易。 只需在psql命令提示符下输入以下内容( AUTOCOMMIT区分大小写,并且应该全部大写):

    \set AUTOCOMMIT off

    这个简单的命令禁用会话的自动提交。 可以使用以下简单的\echo元命令来确定是否启用了自动提交( AUTOCOMMIT区分大小写,并且所有大写字母都以冒号开头,表示它是变量):

    \echo :AUTOCOMMIT

    下一个屏幕快照演示了到目前为止的讨论。 它使用\echo指示自动提交的默认性质( on )以及如何使用\set AUTOCOMMIT禁用它( off )。

    20160909-显示和禁用自动提交

    如果希望“始终”禁用自动提交,可以将\set AUTOCOMMIT off元命令添加到本地的~/.psqlrc文件中。 要获得更全局的设置,可以将此元命令放在数据库的系统配置目录中的psqlrc文件中(可以使用PostgreSQL操作系统级别的命令pg_config --sysconfdir ,如下面的屏幕快照所示)。

    20160909-PostgreSQL系统配置目录

    在使用psql和处理autocommit时要警惕的最后一个细微差别是认识到show AUTOCOMMIT; 通常没有用。 在PostgreSQL 9.5中,如下面的屏幕快照所示,一条错误消息清楚地表明它不再可用。

    201609090-showautocommitdisabledinpg95

    结论

    尽管默认情况下PostgreSQL数据库的psql命令行工具默认启用了自动提交,但是可以通过在会话中使用\set AUTOCOMMIT off显式\set AUTOCOMMIT off或通过个人~/.psqlrc文件或全局系统配置psqlrc文件中的配置来轻松禁用psqlrc提交。

    翻译自: https://www.javacodegeeks.com/2016/09/autocommit-postgresqls-psql.html

    autocommit

    展开全文
  • set autocommit = 0 时 第一种情况: start TRANSACTION; update users set `password` = 9 where id = 1; ROLLBACK; select * from users; 第二种: update users set `password` = 9 where id = 1; ROLLBACK; ...
    set autocommit = 0 时
    第一种情况:
    start TRANSACTION;
    update users set `password` = 9 where id = 1; ROLLBACK;
    select * from users;
    第二种:
    update users set `password` = 9 where id = 1; ROLLBACK;
    select * from users;
    上面两种事物都是可以执行成功的
    
    set autocommit = 1 时
    第一种:
    start TRANSACTION;
    update users set `password` = 9 where id = 1; ROLLBACK;
    select * from users;
    上面操作时可以执行成功的
    第二种:
    update users set `password` = 9 where id = 1; ROLLBACK;
    select * from users;
    上面操作不会rollback因为没有声明开启事物
    这个事物是可以执行成功的
    
    展开全文
  • MYSQL关于 autocommit 设置

    万次阅读 2018-09-12 11:40:56
    查看 MySQL 客户端的事务提交方式命令:select @@autocommit; 修改 MySQL 客户端的事务提交方式为手动提交命令:set @@autocommit = 0; (注:0 表示手动提交,即使用 MySQL 客户端执行 SQL 命令后必须使用commit...
  • mysql autocommit模式

    2020-07-25 17:36:33
    最近网上看了mysql关于悲观锁,他们几乎都引用的这一句话:“注:要使用悲观锁,我们必须关闭mysql数据库的自动提交属性,因为MySQL默认使用autocommit模式,也就是说,当你执行一个更新操作后,MySQL会立刻将结果...
  • Mysql的autocommit使用要点Mysql的autocommit关于关闭mysql autocommit属性及transaction事务相关处理和使用要求服务端应用程序客户端工具 Mysql的autocommit Mysql中autocommit默认为1开启状态,即sql语句是自动...
  • PostgreSQL中的AUTOCOMMIT

    2021-07-18 15:10:37
    检查当前AUTOCOMMIT参数值: postgres=# \echo :AUTOCOMMIT 修改当前AUTOCOMMIT参数值: postgres=# \set AUTOCOMMIT off|on|to 修改psql工具的值默认值: $ echo “\set AUTOCOMMIT off” >>$HOME/.psqlrc ...
  • PostgreSQL的psql中的AutoCommit

    千次阅读 2020-04-28 10:38:05
    对于熟悉Oracle数据库的SQL * Plus的人来说,当将其引入PostgreSQL数据库的psql时,一个潜在的惊喜可能就是psql的默认启用的autocommit 。 这篇文章概述了psql对autocommit的处理以及一些相关的细微差别 。 默认...
  • 将/home/ubuntu/autocommit/autocommit.sh替换为/home/ubuntu/autocommit/autocommit.sh上autocommit.sh位置的绝对路径 0 23 * * *安排cron在每天的11:00 PM执行bash脚本。 或者,您可以设置自己的首选时间表 请确保...
  • AutoCommit基于客户端(psql、pgadmin、navicat等等)SESSION连接参数AUTOCOMMIT,数据库SERVER端不进行控制; 取消自动提交后,DDL语句也需要显示commit或rollback 1、psql \set AUTOCOMMIT off#仅对当前session...
  • 数据库set autocommit=on;与set autocommit=off; 必须在start transaction 开启后该语句才会生效:自动提交。 当set autocommit=on时,相当于每句语句都自动执行一句 commit 需要用到回滚 rollback 是要设置set ...
  • MySQL默认操作模式就是autocommit自动提交模式,我们可以通过设置autocommit的值改变是否是自动提交autocommit模式。 通过以下命令可以查看当前autocommit模式: show variables like 'autocommit'; 查询结果: 从...
  • 为什么建议MySQL innodb默认开启autocommit 一、 MySQL innodb默认启用autocommit的优缺点 优点: a) 避免执行SQL后没提交而导致其它会话看不到数据,甚至夯住; b) 避免不可控的大事务发生; c) 避免MySQL 5.7多...
  • 关于mysql的参数autocommit

    万次阅读 多人点赞 2018-09-17 16:02:47
    默认情况下autocommit的值为1 1.首先准备一张innodb引擎的测试表: CREATE TABLE `test` ( `id` int(11) NOT NULL ) ENGINE=InnoDB; INSERT INTO `test` VALUES ('1'); INSERT INTO `test` VALUES ('3');...
  • 背景:在业务逻辑中,涉及批量update,如果是mysql默认设置下autocommit=1,即多条update语句会一条一条的执行,而不会提交后一起commit,这时候我就想着用set autocommit=0 +update语句 + commit; 事实证明这样确实...
  • autocommit状态、会话id

    2019-12-02 17:13:45
    查看autocommit状态 会话级 select @@autocommit; show session variables like 'autocommit'; 全局系统变量 show global variables like 'autocommit'; 修改autocommit模式 set session autocommit=0;...
  • solr的commit与autocommit

    2019-08-26 10:02:19
    在solrconfig.xml里有两个配置项,autoCommit和autoSoftCommit,他们是干什么的呢?他们是solr提交文档的两种方式。 commit 一般提交又或者叫硬提交(hard commit), 使用这种提交会把文档立即持久化到磁盘,并可以...
  • mysql关闭autocommit带来的坑

    千次阅读 2019-12-25 15:46:19
    执行show variables like 'autocommit';查看是否开启自动提交 set autocommit ='OFF'; 关闭自动提交 打开两个查询页 按如下顺序执行 窗口1: 执行insert语句插入一条数据 INSERT INTO `upload_local_file` (`...
  • self.con.autocommit(1) File "src\pymssql.pyx", line 267, in pymssql.Connection.autocommit TypeError: Cannot convert int to bool 从提示来看时autocommit这个函数传入参数出现了问题,因此对这个函数进行了...
  • mysql 自动提交(autocommit)

    千次阅读 2019-02-15 16:07:08
    默认情况下, MySQL启用自动提交模式(变量autocommit为ON)。这意味着,只要你执行DML操作的语句,MySQL会立即隐式提交事务(Implicit Commit) 在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL ...
  • 使用Mybatis插入数据到Mysql数据库时,程序运行没有报错但是数据并没有插入。 public void testSave() throws Exception{ User user=new User(); user.setUsername("mybatis saveUser"); user.setAddress(...
  • ### Error querying database. Cause: org.apache.ibatis.transaction.TransactionException: Error configuring AutoCommit. Your driver may not support getAutoCommit() or setAutoCommit(). Requeste...
  • mysql 默认是开启 auto commit 的。可以通过如下命令查看 session 级别和 global 级别的设置: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ... select @@session.autocommit; +---------------------...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,006
精华内容 24,002
关键字:

autocommit