是mysql错误还是预期行为?

Posted

技术标签:

【中文标题】是mysql错误还是预期行为?【英文标题】:Is it mysql bug or expected behavior? 【发布时间】:2021-07-06 02:42:27 【问题描述】:

mysql 5.7.33 iso 级别:读取已提交 自动提交:关闭

第 1 节: 创建表 t1(tid int not null,tname varchar(32) null); 创建表 t2(tid int primary key not null, tname varchar(32) null); 插入 t1 值(1,'1'),(2,'2'),(3,'3'),(4,'4'); 插入 t2 值(1,'1'),(2,'2'),(3,'3'),(4,'4'); 提交; 设置自动提交=0; 从 t1 中删除 在哪里整理( 从 t2 中选择 tid 其中 tname 不为空 ) 并且 tname 为空 ; 没有提交

然后打开另一个会话(我们称之为会话 2), 执行: 更新 t2 设置 tname = null; 更新语句被会话 1 阻止。

并且会话 2 在 mysql 8.0.25 中也被阻止了。

【问题讨论】:

【参考方案1】:

我在 8.0.20 运行它,但它也在 session2 中被阻止

会话1

select version();
drop table if exists t1;
drop table if exists t2;

set session transaction isolation level read committed;
SELECT @@transaction_isolation;

create table t1(tid int not null,tname varchar(32) null);
create table t2(tid int primary key not null, tname varchar(32) null);
insert into t1 values(1,'1'),(2,'2'),(3,'3'),(4,'4');
insert into t2 values(1,'1'),(2,'2'),(3,'3'),(4,'4');
commit;
set autocommit=0;
delete from t1 where tid in( select tid from t2 where tname is not null ) and tname is null ;

#commit;

会话2

set session transaction isolation level read committed;
SELECT @@transaction_isolation;

update t2 set tname = null;

测试方法不同吗?

【讨论】:

再次测试,mysql 8.0.25,session 2也被阻塞了……

以上是关于是mysql错误还是预期行为?的主要内容,如果未能解决你的问题,请参考以下文章

执行 2x 的脚本是 Chrome + Firefox 中的预期行为或错误?

Node.JS MySql 在循环中等待预期结果

我在连接到数据库时遇到错误使用节点包 mysql v2.16.0 错误:数据包乱序。得到:80 预期:0

mysql 语法错误 1064 在第 194 行为多对多关系添加外键

使用 JSON 数组作为值时的 MySQL 语法错误

这种 PHP 按值调用的行为有合理的解释吗?还是 PHP 错误?