MySQL用户自定义异常可否使用45000之外的45系列SQLSTATE编码?
MySQL SIGNAL语句45前缀SQLSTATE使用说明
你所说的使用45前缀自定义不同场景SQLSTATE的用法是MySQL官方允许的,可用的编码范围为45000 ~ 45999,完全可以用来做客户端错误分支判断,你可以根据业务需要自定义该区间内的所有编码,只要团队内部统一定义好各编码对应的异常场景即可。
相关说明如下:
- SQLSTATE编码规则中,
45开头的区间是官方预留给用户自定义异常的专属区间,MySQL服务本身永远不会主动抛出该区间的SQLSTATE值,不会和系统内置异常产生冲突。 - 你测试到的现象符合官方设计:所有45开头的自定义SQLSTATE通过
SIGNAL抛出时,返回的MySQL内部错误码固定为1644,但SQLSTATE的完整值会随异常信息同步返回,不管是存储过程内的DECLARE HANDLER逻辑还是外部客户端,都可以读取到具体的SQLSTATE值实现差异化处理。 - 官方推荐用户自定义异常时优先使用45前缀的SQLSTATE,不要占用其他系统预留区间(比如
22开头的数据异常、23开头的约束异常等),避免和系统自带异常混淆。
使用示例:
-- 抛出X场景异常 SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'X场景参数校验失败'; -- 抛出Y场景异常 SIGNAL SQLSTATE '45002' SET MESSAGE_TEXT = 'Y场景权限不足';
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

