Mysql 交易:固定/犯罪/ 和回滚

我更新了我的数据库引擎 PhpMyAdmin 从 MyISAM 到 INNODB, 解决回滚。

这是我的要求 SQL :


START TRANSACTION;
UPDATE jkm_content SET state=0 WHERE title IN /'title-1','title2'/;


这是结果 :


start transaction;# MySQL returned an empty result set /i.e. zero
rows/.
UPDATE jkm_content SET state=1 WHERE title IN /'title-1','title2'/;# 2 rows affected.


1/ 因此,操作员告诉我触摸了 2 线条,但更改不会出现在任何地方 /没有我的 DB, 既不在网站上/。 我以为
start transaction

允许我可视化更改 /临时 DB/, 然后,如果我满足请求 "commit". /我明白我需要
commit

刷新 DB, 但如果我。
commit

, 然后改变将是永久性的/.

2/ 然后我不明白的意思
rollback

, 如果我在提交之前没有看到效果。 这两个请求之间有什么区别 :


START TRANSACTION;
UPDATE jkm_content SET state=0 WHERE title IN /'title-1','title2'/;


AND


START TRANSACTION;
UPDATE jkm_content SET state=0 WHERE title IN /'title-1','title2'/;
ROLLBACK;


3/ 如果我理解正确,那么所有这些函数都是一样的 :


START TRANSACTION
BEGIN
BEGIN WORK
已邀请:

风见雨下

赞同来自:

1/ 您所做的所有更改都可以在同一交易中可见。 如果你这样做


START TRANSACTION;
INSERT INTO MyTable VALUES /'Hi there'/;
SELECT * FROM MyTable;


您的产出将包括 'Hi there'. 但是,如果您与数据库运行第二个连接,则不会显示新行,直到您从第一个连接修复事务。 尝试使用命令行使用两个数据库连接使用此数据库。

您没有看到您网站的影响,因为在两个数据库连接中不能具有相同的交易 /将在您的请求开始时进行与数据库的新连接。/.

2/ 当数据库连接关闭时,未记录的所有交易都会回滚。 因此,如果这是你唯一的两个请求,没有区别。 但是,之间存在差异


START TRANSACTION;
INSERT INTO MyTable VALUES /'This one would be discarded on rollback'/;
ROLLBACK;
INSERT INTO MyTable VALUES /'This one will be permanent because not within transaction'/;


3/ 是的,这一切都是一样的。

知食

赞同来自:

其他事务的框架中的更改不可见其他事务。 /除了具有孤立级别的交易外
READ UNCOMMITTED

/ 直到交易是固定的。

交易回滚之间存在巨大差异,并将永久保存永久 /或直到发动机因超时而杀死她/. 后者意味着服务器无法释放分配以支持事务的资源。 除了 , 像你一样做
UPDATE

, mysql 必须为受影响的行提供独占锁,而且没有其他交易可以更新/删除这些行。 如果您有一个留下事务打开的应用程序,那么您很可能会发现自己所有连接都忙碌,或者等待,或者很多血易 .

是的,他们都开始了新的交易 mysql.

要回复问题请先登录注册