我现在有两个SQL文,第一个可以正常执行,第二个一执行MySQL就崩溃。。
崩溃指的是:docker里面对应的那个MySQL容器直接没了,docker ps -a都看不到的那种。
第一个SQL文:
update
cfg_dev_network_push_status as T1
inner join cfg_dev_network_bind_status as T2 on
T1.task_id = T2.id
and T1.del_flag = '0'
and T1.push_type = '1'
and T1.push_result != '0'
and T1.push_retry_times < 3
and T2.del_flag = '0'
and T2.dev_id = 'theDevId'
and T2.status = '1' set
T1.push_retry_times = T1.push_retry_times + 1,
T1.push_status = '1',
T1.push_end_time = '20231010141154002',
T1.push_result = '1',
T1.fail_reason = '109'
order by
T1.id asc
第二个SQL文:
update
cfg_dev_network_push_status as T1
inner join cfg_dev_network_bind_status as T2 on
T1.task_id = T2.id
and T1.del_flag = '0'
and T1.push_type = '1'
and T1.push_result != '0'
and T1.push_retry_times < 3
and T2.del_flag = '0'
and T2.dev_id = 'theDevId'
and T2.status = '1' set
T1.push_retry_times = T1.push_retry_times + 1,
T1.push_status = '1',
T1.push_end_time = '20231010141154002',
T1.push_result = '1',
T1.fail_reason = '109'
order by
T1.push_status desc,
T1.push_retry_times desc,
T1.id asc
经测试,第二个SQL文里面,T1.push_status desc
和T1.push_retry_times desc
,加任意一个,都会导致MySQL崩溃,只有T1.id asc
的时候,是可以正常执行的。
push_status的数据类型是char(1),数据里面非0即1。
push_retry_times的数据类型是int。
数据库中两个表的数据都在50条左右,不存在内存过大的影响;
直接在DBeaver中进行数据查询,不考虑锁的影响。
之后我在服务器中没找到MySQL相关崩溃的日志。。。。
所以,为啥会崩呗,求各路大神帮助~
=================================================================
建表文如下所示
-- `lebon-infra-dev`.cfg_dev_network_push_status definition
CREATE TABLE `cfg_dev_network_push_status` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '流水号 | 与id为同一字段,自增数列',
`task_id` varchar(16) NOT NULL COMMENT '任务ID',
`push_status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0' COMMENT '推送状态(0:待推送/1:已推送/2:已取消)',
`push_plan_time` char(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '预约推送时间(YYYYMMDDHHMMSS)',
`push_type` char(1) NOT NULL COMMENT '推送种类(1:推送配置项/2:推送优先度/3:推送重启命令)',
`dev_id` varchar(32) NOT NULL COMMENT '设备ID',
`config_group_id` varchar(16) NOT NULL COMMENT '配置组ID',
`config_item_id` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '配置项ID',
`push_begin_time` char(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '00000000000000000' COMMENT '推送开始时间(YYYYMMDDHHMMSSFFF)',
`push_end_time` char(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '00000000000000000' COMMENT '推送结束时间(YYYYMMDDHHMMSSFFF)',
`push_duration_s` int NOT NULL DEFAULT '0' COMMENT '推送耗时',
`push_result` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '推送结果0:成功/1:失败',
`fail_reason` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '失败原因',
`push_retry_times` int NOT NULL DEFAULT '0' COMMENT '重试次数',
`remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0' COMMENT '删除状态',
`version` int NOT NULL DEFAULT '0' COMMENT '版本锁',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `cfg_dev_network_push_status_un` (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=149 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='配置-终端网络配置推送状态';
-- `lebon-infra-dev`.cfg_dev_network_bind_status definition
CREATE TABLE `cfg_dev_network_bind_status` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务ID | 与id为同一字段,自增数列',
`dev_id` varchar(32) NOT NULL COMMENT '设备ID',
`config_group_id` varchar(16) NOT NULL COMMENT '配置组ID',
`config_group_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '配置组名',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0' COMMENT '状态',
`push_plan_time` char(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '预约推送时间(YYYYMMDDHHMMSS)',
`push_begin_time` char(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '00000000000000000' COMMENT '推送开始时间(YYYYMMDDHHMMSSFFF)',
`push_end_time` char(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '00000000000000000' COMMENT '推送结束时间(YYYYMMDDHHMMSSFFF)',
`push_duration_s` int NOT NULL DEFAULT '0' COMMENT '推送耗时',
`effective_time` char(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '00000000000000000' COMMENT '实际生效时间(YYYYMMDDHHMMSSFFF)',
`invalid_time` char(17) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '00000000000000000' COMMENT '实际失效时间(YYYYMMDDHHMMSSFFF)',
`fail_reason` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '失败原因',
`cancel_reason` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '取消原因',
`operator` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '操作者',
`remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',
`version` int NOT NULL DEFAULT '0' COMMENT '版本锁',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0' COMMENT '删除状态',
`create_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_by` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `cfg_dev_network_bind_status_un` (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1070 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='配置-终端网络配置绑定状态';
试了一下,具体问题叫 Incorrect usage of UPDATE and ORDER BY ,意思是update语句如果有join那么是不允许order by的。不过,有点诡异的是你第1条语句居然成功了,我这边试下来你第1、2条语句都会报这个错。如果想先绕过这个问题,当下可以写成:
希望能帮助到你。