为什么我可以在没有任何 START TRANSACTION 的情况下使用 INSERT,也可以在 mysql 中使用 autocommit = 0 的 COMMIT/ROLLBACK?
Why can I use INSERT without any START TRANSACTION nor COMMIT/ROLLBACK with autocommit = 0 in mysql?
所以我想更多地了解 MySQL 中的自动提交语句,但在我使用 SET autocommit = 0;
并尝试 运行 和 INSERT
没有任何 START TRANSACTION
也没有 COMMIT/ROLLBACK
最后它仍然将它插入 table?
据我所知,如果自动提交等于 1,它会自动提交,因此这是有道理的,但我将自动提交设置为零,因此如果我不使用任何 START TRANSACTION
和 COMMIT
或 ROLLBACK
块包围插入它不应该工作吗?
我知道有一些 DML 会自动提交,我知道 DDL 语句也会这样做,但在这种情况下 INSERT
似乎没有任何 DML 语句会这样做。
代码如下:
SET autocommit = 0;
SELECT @@autocommit; --It returns 0
-- No START TRANCATION
INSERT INTO example(first_name, last_name) VALUES ('TEST', 'TSET');
-- No COMMIT nor ROLLBACK
有什么想法吗?
提前致谢!
您在当前会话中看到这些行 - 但您不会在另一个会话中看到它们。
看:
比较时间戳...
所以我想更多地了解 MySQL 中的自动提交语句,但在我使用 SET autocommit = 0;
并尝试 运行 和 INSERT
没有任何 START TRANSACTION
也没有 COMMIT/ROLLBACK
最后它仍然将它插入 table?
据我所知,如果自动提交等于 1,它会自动提交,因此这是有道理的,但我将自动提交设置为零,因此如果我不使用任何 START TRANSACTION
和 COMMIT
或 ROLLBACK
块包围插入它不应该工作吗?
我知道有一些 DML 会自动提交,我知道 DDL 语句也会这样做,但在这种情况下 INSERT
似乎没有任何 DML 语句会这样做。
代码如下:
SET autocommit = 0;
SELECT @@autocommit; --It returns 0
-- No START TRANCATION
INSERT INTO example(first_name, last_name) VALUES ('TEST', 'TSET');
-- No COMMIT nor ROLLBACK
有什么想法吗?
提前致谢!
您在当前会话中看到这些行 - 但您不会在另一个会话中看到它们。
看:
比较时间戳...