重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
就是关闭自动提交,插入的数据暂不写进数据库,保留到临时区域,然后在提交
昭化网站建设公司成都创新互联公司,昭化网站设计制作,有大型网站制作公司丰富经验。已为昭化成百上千家提供企业网站建设服务。企业网站搭建\成都外贸网站制作要多少钱,请找那个售后服务好的昭化做网站的公司定做!
mysqli::autocommit -- mysqli_autocommit — 打开或关闭本次数据库连接的自动命令提交事务模式
说明
面向对象风格
mysqli::autocommit ( bool $mode ) : bool
过程化风格
mysqli_autocommit ( mysqli $link , bool $mode ) : bool
打开或关闭本次数据库连接的自动命令提交事务模式。
如需要确认当前连接的自动事务提交状态,可执行这个SQL请求SELECT @@autocommit.
参数
link
仅以过程化样式:由mysqli_connect() 或 mysqli_init() 返回的链接标识。
mode
Whether to turn on auto-commit or not.
返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。
注释
Note:
这个方法不会在不支持事务处理的表单查询中生效,如MyISAM或 ISAM。
MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模式。
通过以下命令可以查看当前autocommit模式
mysql show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.04 sec)
从查询结果中,我们发现Value的值是ON,表示autocommit开启。我们可以通过以下SQL语句改变这个模式
mysql set autocommit = 0;
值0和OFF都是一样的,当然,1也就表示ON。通过以上设置autocommit=0,则用户将一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务重新开始一个新的事务。
举个例子:
张三给李四转账500元。那么在数据库中应该是以下操作:
1,先查询张三的账户余额是否足够
2,张三的账户上减去500元
3,李四的账户上加上500元
以上三个步骤就可以放在一个事务中执行提交,要么全部执行要么全部不执行,如果一切都OK就commit提交永久性更改数据;如果出错则rollback回滚到更改前的状态。利用事务处理就不会出现张三的钱少了李四的账户却没有增加500元或者张三的钱没有减去李四的账户却加了500元。
MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,所以改变autocommit没有什么作用。但不会报错,所以要使用事务处理的童鞋一定要确定你所操作的表示支持事务处理的,如InnoDB。如果不知道表的存储引擎可以通过查看建表语句查看建表的时候有没有指定事务类型的存储引擎,如果没有指定存储引擎默认则是MyISAM不支持事务的存储引擎。
当然,事务处理是为了保障表数据原子性、一致性、隔离性、持久性。这些都是要消耗系统资源的,要谨慎选择。
解决方案之一,就是把你的所有操作放在一个连接中执行完毕。mysql
-h${HOSTNAME}
-P${PORT}
-u${USERNAME}
-p${PASSWORD}
${DBNAME}
x.sqlset
AUTOCOMMIT=0;start
transaction;在X.sql
中你可以写入语句。中间部分是一些数据库的操作,如移表,删除等commit;