gpt4 book ai didi

mysql - 事务不适用于我的 MySQL 数据库

转载 作者:行者123 更新时间:2023-11-29 07:03:55 25 4
gpt4 key购买 nike

我的网站使用 MySQL 数据库,该数据库托管在 Linux 共享服务器上。

我编写了一个测试脚本,使用“mysql”运行它来测试事务是否正常工作。运行脚本,我没有收到任何错误,但执行脚本的结果就像未启用事务一样。

我还确保向运行该脚本的 MySQL 管理员用户授予所有权限。

为了仔细检查,我在 PostgreSQL 上尝试了相同的测试脚本,脚本的结果表明事务确实有效。所以这绝对是 MySQL 特有的东西。

该脚本在我创建的一个简单表上运行,如下所示:

create table a ( id serial primary key);

以下是测试脚本:

delete from a;
set autocommit = 0;
start transaction;
insert into a(id) values(1);
rollback work;
select count(*) from a;

因此脚本确保表为空,然后启动一个事务,插入一行并回滚插入。当“插入”回滚时,“选择”应该指示表包含 0 行。

在 PostgreSQL 上运行:

$ psql db admin < test1
DELETE 0
START TRANSACTION
INSERT 0 1
ROLLBACK
count
-------
0

这是预期行为,插入回滚时表中有 0 行。

在我的 MySQL 数据库上运行相同的操作:

$ mysql db -u admin < test1
count(*)
1

回滚后有 1 行表示“插入”回滚,就像在非事务模式下一样。

如上所述,管理员被授予数据库的所有权限。

我错过了什么吗?

最佳答案

该表可能是默认使用 MyISAM 存储引擎创建的。MyISAM存储引擎不支持事务。

创建表格

CREATE TABLE a ( id SERIAL PRIMARY KEY) ENGINE = MYISAM;

查询

DELETE FROM a;
SET autocommit = 0;
START TRANSACTION;
INSERT INTO a(id) VALUES(1);
ROLLBACK WORK;
SELECT COUNT(*) FROM a;

结果

计数(*)

     1

制作InnoDB表

查询

ALTER TABLE a ENGINE=INNODB; 

查询

DELETE FROM a;
SET autocommit = 0;
START TRANSACTION;
INSERT INTO a(id) VALUES(1);
ROLLBACK WORK;
SELECT COUNT(*) FROM a;

结果

count(*)  
----------
0

关于mysql - 事务不适用于我的 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com