为什么MySQL工作台显示未提交的更改?
-- create a new empty table
DROP TABLE IF EXISTS X;
CREATE TABLE X (val varchar(10));
-- disable autocommit
SET AUTOCOMMIT = 0;
-- insert a row without committing
INSERT INTO X (val) VALUES ('text');
在这一点
SELECT @@autocommit, @@tx_isolation;
返回
\x{e76f}\x{e76f}可重复读-读
但
我似乎有一个错误的想法:
update table_name set id=222 where id >333;
我的旧观点是,如果没有begin,commit就不会启动事务。但这似乎是错的。
但是当我阅读mysql 时,我发现似乎所有的sql都会在transaction.if中不显式地使用begin和commit,它将启动InnoDB中隐含的事务。
在InnoDB中,所有用户活动都发生在事务中。如果启用了自动提交模式,则每个SQL语句都会自行形成单个事务。默认情况下,MySQL为每个启用自动提交的新连接启动会话,因此如果该语句没有返回错误,则在每个SQL语句之后执行提交。如果语句返
在MySQL中使用事务的想法很好。如果出现问题,能够回滚事务的想法也很好。
我的问题是:在应用程序中,是否值得自己控制事务,或者让MySQL替我处理它?换句话说,应该对MySQL给我的自动提交特性有积极的不信任吗?
示例:
try
{
$mysqli->autocommit( 0 );
//Normally, would go through the steps of prepping and executing etc,
//but I'll use this for brevity.
if( !$mysqli->query( "