将mysql数据迁移到达梦数据库后,尝试新增数据异常:
nested exception is dm.jdbc.driver.DMException: 仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋
达梦官方文档解释:
一般情况下,当数据表中,某一列被设置成了标识列之后,是无法向标识列中手动的去插入标识列的显示值。但是,可以通过设置 SET IDENTITY_INSERT 属性来实现对标识列中显示值的手动插入。语法说明:
- SET IDENTITY_INSERT 表名 ON:表示开启对标识列显示值插入模式,允许对标识列显示值进行手动插入数据。
- SET IDENTITY_INSERT 表名 OFF:表示关闭对标识列显示值的插入操作,标识列不允许手动插入显示值。
意思就是默认SET IDENTITY_INSERT是OFF的,向自增列插入插入或修改程序自定义的值时,会报上面的异常,解决办法就是将 IDENTITY_INSERT 的开启 ON,并在sql执行完毕后,改回OFF;
如:
SET IDENTITY_INSERT [<模式名>.]<表名> ON ;
insert into …;commit;
SET IDENTITY_INSERT [<模式名>.]<表名> OFF;
但是这是针对每个sqlSession的操作,没有类似全局的配置, 如果想用的话,可以根据代码量增加切面等操作。
本人因为项目代码中有主键生成器,所以将这些键的自增属性进行了去除,sql如下
(慎用!!!!)
ALTER TABLE <表名> DROP IDENTITY; -- 去掉自增属性
参考链接:错误码 | 达梦技术文档