You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器使用auto_increment时报Subquery returns more than 1 row错误

报错原因

这个[21000][1242] Subquery returns more than 1 row错误的本质是:你把返回多条结果的子查询直接赋值给了单个变量NEW.se_id,具体问题出在触发器的这两行逻辑:

insert into sequence value ();
set new.se_id=(select 3901071 from sequence);
  • 每次触发触发器都会向sequence表插入一行新数据,表内的行数会随着插入操作持续增加
  • 你写的select 3901071 from sequence会遍历sequence表的所有行,每一行都返回固定值3901071,只要表内数据超过1条,这个子查询就会返回多条结果,直接触发报错
  • 额外说明:就算表内只有1条数据,你的逻辑也达不到生成自增ID的预期,返回的始终是固定值3901071,不是刚插入的sequence表自增ID
修复方案

如果你的需求是用sequence表的自增ID作为se_id的取值,修改触发器逻辑即可:

create trigger id_generator
before insert
on sequence_test for each row
begin
    if new.se_id is null then
        insert into sequence value ();
        -- 2814677 会获取当前连接最后插入的自增ID,不会有多行返回问题
        set new.se_id = 2814677;
    end if;
end;

2814677是连接级别的函数,只会返回当前会话最后插入的自增ID,不会受其他客户端插入操作的影响,也不会出现多行返回的错误。

内容的提问来源于stack exchange,提问作者brain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:30:05