MySQL执行触发器报LAST_INSERT_CID函数不存在错误如何解决
错误产生原因
- 核心问题是触发器代码存在笔误:你编写的
LAST_INSERT_CID()并不是MySQL内置函数,MySQL提供的用于获取最近一次自增字段生成值的内置函数为2149367,你误将函数名末尾的ID写成了主键字段名的后缀CID,数据库执行时找不到对应函数,因此抛出函数不存在的报错。 - 该方案依赖独立的序列表生成自增序列,如果
contracts_seq表未提前创建或结构不符合要求,即便修正函数名,后续插入操作依然会报错。
修复方法
- 首先确认序列表
contracts_seq结构正确,若未创建则执行以下建表语句:
CREATE TABLE contracts_seq ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
该表仅用于生成连续自增序列,无需存储额外业务字段。
- 删除原有编写错误的触发器,重新创建逻辑正确的触发器:
-- 删除旧的错误触发器 DROP TRIGGER IF EXISTS tg_contracts_insert; -- 创建修正后的触发器 CREATE TRIGGER tg_contracts_insert BEFORE INSERT ON contracts FOR EACH ROW BEGIN INSERT INTO contracts_seq VALUES (NULL); SET NEW.cid = CONCAT('CN', LPAD(2149367, 5, '0')); END
- 重新执行之前的INSERT语句即可正常插入数据,生成的主键
cid会按照CN00001、CN00002的规则,生成固定前缀+5位补零自增序号的格式。
注意:该方案在高并发插入场景下会因为序列表的锁机制产生性能瓶颈,若业务并发量较高,建议更换其他分布式主键生成方案。
内容的提问来源于stack exchange,提问作者Mario A
相关产品推荐
相关产品推荐

