重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我的第一感觉是,事务没有提交!
创新互联公司专注于盂县网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供盂县营销型网站建设,盂县网站制作、盂县网页设计、盂县网站官网定制、微信小程序定制开发服务,打造盂县网络公司原创品牌,更为您提供盂县网站排名全网营销落地服务。
后面发现,原来PL/SQL Developer 默认是不会自动提交事务的!
那自能手动提交或者设置成自动提交事务!
打开PL/SQL Developer,
英语界面:Tools - Preferences - Window Types - SQL Window:勾选“AutoCommit SQL”,
中文是:工具- 首选项 - 窗口类型 - SQL窗口 - 勾选“自动提交sql”
最后点击确定,即可实现自动提交操作
退出登录自动提交
英文:Tools - Preferences - Oracle - Connection - Log off with open transaction:选择“Commit”。
中文:工具- 首选项 -Oracle - 注销(有打开的事务) - 选择提交
现在,无论是执行sql,还是注销用户,都会自动提交事务啦
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的DDL语句不自动提交
首先,要看你的表是MYISAM还是INNODB
MYISAM rollback 是没有用的,因为不支持事务,不能回滚。
INNODB rollback 可以回滚。
还有注意的是,mysql默认的是自动提交的。
所以即使你使用的是innodb,比如delete了一行数据,没有commit(系统自动commit了),你rollback也不回恢复,除非你把自动提交关闭了set autocommit=0。