加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

php – Mysql事务:提交和回滚

发布时间:2021-03-15 07:44:15 所属栏目: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. zer

我将我的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行受到影响,但更改不会出现在任何地方(我的数据库或网站中都没有).我虽然启动事务将允许我可视化更改(在临时数据库中)然后如果我满意,我“提交”查询. (我知道我需要提交更新数据库,但如果我提交更改将是永久性的).

2)然后我没有得到rollback的点,如果在提交之前我看不到效果.这两个查询之间的区别是什么:

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

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;

你的输出将包括’你好’.但是,如果启动第二个数据库连接,则在第一个连接中提交事务之前,不会显示新行.尝试使用命令行使用两个数据库连接来玩这个.

您没有在您的网站中看到效果,因为您无法在两个数据库连接中拥有相同的事务(将在您的请求开始时建立新的数据库连接).

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)是的,这些都是一样的.

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!