注册
达梦数据库-错误码-[2723]-分析处理
技术分享/ 文章详情 /

达梦数据库-错误码-[2723]-分析处理

Live 2024/07/05 885 2 0

问题现象

image20240628154730851.png

问题分析

在数据库(DBMS)中,IDENTITY属性用于创建自增列,这些列会自动生成唯一的数值。在这种情况下,如果尝试手动插入值到自增列,会导致错误,除非明确设置 IDENTITY_INSERTONIDENTITY_INSERT 属性的默认值为 OFF。SET IDENTITY_INSERT 的设置是在执行或运行时进行的。当一个连接结束,IDENTITY_INSERT 属性将被自动还原为 OFF;

DM 提供两种自增方式:IDENTITY 自增列和 AUTO_INCREMENT 自增列。与IDENTITY 自增列 不同的是,AUTO_INCREMENT 自增列允许隐式和显示插入自增列值,只要不违反主键的唯一性约束。

示例如下:

CREATE TABLE TEST_IDENTITY ( ID INT IDENTITY(1,1), -- 自增列 NAME VARCHAR(50) ); INSERT INTO TEST_IDENTITY (NAME) VALUES ('Alice'); INSERT INTO TEST_IDENTITY (NAME) VALUES ('Bob'); COMMIT; -- 报错-2723: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值 INSERT INTO TEST_IDENTITY (ID, NAME) VALUES (3, 'Charlie'); COMMIT; -- 设置 IDENTITY_INSERT 为 ON SET IDENTITY_INSERT TEST_IDENTITY ON; -- 插入自增列的值(成功) INSERT INTO TEST_IDENTITY (ID, Name) VALUES (3, 'Charlie'); -- 关闭 IDENTITY_INSERT SET IDENTITY_INSERT TEST_IDENTITY OFF; CREATE TABLE TEST_AUTOINCREMENT ( ID INT AUTO_INCREMENT, NAME VARCHAR(50), PRIMARY KEY(ID) ); --隐式插入 INSERT INTO TEST_AUTOINCREMENT (NAME) VALUES ('Alice'); INSERT INTO TEST_AUTOINCREMENT (NAME) VALUES ('Bob'); --显示插入 INSERT INTO TEST_AUTOINCREMENT (ID,NAME) VALUES (3,'Bob'); COMMIT;

解决方法

  • 如果确认使用IDENTITY自增列,建议会话设置 IDENTITY_INSERTON

  • 在MySQL移植DM时经常出现这个问题,原因是默认迁移自增列时使用IDENTITY定义了自增列,导致后面显示插入报错。版本高一些的迁移工具可选择使用AUTO_INCREMENT自增列解决此问题。

image20240628172654855.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服