达梦使用问题记录2:默认不允许给自增id手动insert

达梦数据库默认不允许直接向自增列插入值。

解决方案

您可以根据具体情况,参考以下表格选择并实施合适的解决方案:

解决方案

心思路

适用场景与操作提示
启用 IDENTITY_INSERT临时开启设置,允许手动插入自增列值。需要保留插入语句中的自增列值(如数据迁移、备份恢复)。需确保:
• 在插入语句前后分别执行 ON 和 OFF
• 必须在INSERT语句中明确列出所有列名
修改 INSERT 语句从INSERT语句中移除自增列及其值。不关心插入的具体自增值,交由数据库自动生成。这是推荐的做法,一劳永逸。
修改表结构(慎用)直接移除表的自增属性。确定不再需要自增特性,且后续会完全手动管理主键。此操作不可逆,需谨慎评估。

启用 IDENTITY_INSERT 示例

如果确定需要手动插入自增列的值,请按以下格式修改您的SQL文件或执行语句:

sql

-- 开启手动插入。请将 "模式名.表名" 替换为您的实际表名
SET IDENTITY_INSERT "模式名"."表名" ON;

-- 您的原始INSERT语句,必须指定所有列名
INSERT INTO 表名 (id, 其他列...) VALUES (具体值, ...); 
-- 可以有多条INSERT语句

-- 关闭手动插入
SET IDENTITY_INSERT "模式名"."表名" OFF;
COMMIT; -- 提交事务:cite[3]

注:SET IDENTITY_INSERT 的设置是会话级别的,连接断开后会自动还原为OFF。一个会话中只能有一个表的此属性为ON。

修改 INSERT 语句示例

这是最简单且推荐的方法,只需调整您的INSERT语句,忽略自增列:

sql

-- 原语句(会报错):
-- INSERT INTO your_table (id, name, age) VALUES (1, '张三', 25);

-- 修改后(正确):
INSERT INTO your_table (name, age) VALUES ('张三', 25);
-- 让数据库自动为id列生成值:cite[6]

一个重要的提醒

在达梦数据库中,SET IDENTITY_INSERT 是一个会话级的设置。这意味着:

  • 它只在当前的数据库连接中有效。

  • 一旦您关闭了当前连接(例如,关闭了SQL工具或中断了命令行会话),这个设置就会自动失效,恢复为默认的OFF状态。

  • 因此,如果您是通过一个脚本或程序来执行这些SQL,需要确保在同一连接会话中完成ON、插入、OFF这一系列操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值