达梦7 设置主键自增
达梦7 设置主键自增
设置是否允许将显式值插入表的自增列中。
语法格式
SET IDENTITY_INSERT [<模式名>.]<表名> ON | OFF;
创建表时使用identity(1,1)设置主键自增,一个表只能有一个自增列
CREATE TABLE "NBFG"."DATA_MODEL_SPEED_POWER_NEW"
(
"ID" INT IDENTITY(1, 1) NOT NULL,
"FAN_MODEL" VARCHAR(30) NOT NULL,
"WIND_SPEED" FLOAT NOT NULL,
"WIND_POWER" FLOAT NOT NULL,
"DELETED" INT DEFAULT 0 NOT NULL,
"STORAGE_TIME" DATETIME(6) DEFAULT CURRENT_TIMESTAMP(),
"MODIFIED_TIME" DATETIME(6),
CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "NBFG"."DATA_MODEL_SPEED_POWER_NEW" IS '风机功率曲线';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."DELETED" IS '0未删除 1已删除';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."FAN_MODEL" IS '风机型号';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."ID" IS '风机型号自增ID';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."MODIFIED_TIME" IS '修改时间';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."STORAGE_TIME" IS '入库时间';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."WIND_POWER" IS '功率';
COMMENT ON COLUMN "NBFG"."DATA_MODEL_SPEED_POWER_NEW"."WIND_SPEED" IS '风速';
使用说明
- IDENTITY_INSERT 属性的默认值为 OFF。SET IDENTITY_INSERT 的设置是在执行或运行时进行的。当一个连接结束,IDENTITY_INSERT 属性将被自动还原为 OFF;
- DM 要求一个会话连接中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON,当设置一个新的表 IDENTITY_INSERT 属性设置为 ON 时,之前已经设置为 ON 的表会自动还原为 OFF。当一个表的 IDENTITY_INSERT 属性被设置为 ON 时,该表中的自动增量列的值由用户指定。如果插入值大于表的当前标识值(自增列当前值),则 DM 自动将新插入值作为当前标识值使用,即改变该表的自增列当前值;否则,将不影响该自增列当前值;
- 当设置一个表的 IDENTITY_INSERT 属性为 OFF 时,新插入行中自增列的当前值由系统自动生成,用户将无法指定;
- 自增列一经插入,无法修改;
- 手动插入自增列,除了将 IDENTITY_INSERT 设置为 ON,还要求在插入列表中明确指定待插入的自增列列名。插入方式与非 IDENTITY 表是完全一样的。如果插入时,既不指定自增列名也不给自增列赋值,则新插入行中自增列的当前值由系统自动生成。
举例说明
例 SET IDENTITY_INSERT 的使用
- PERSON_TYPE表中的PERSON_TYPEID列是自增列,目前拥有的数据如下所示。
PERSON_TYPEID | NAME |
---|---|
1 | 采购经理 |
2 | 采购代表 |
3 | 销售经理 |
4 | 销售代表 |
- 在该表中插入数据,自增列的值由系统自动生成。
INSERT INTO PERSON.PERSON_TYPE(NAME) VALUES('销售总监');
INSERT INTO PERSON.PERSON_TYPE(NAME) VALUES('人力资源部经理');
插入结果如下所示:
PERSON_TYPEID | NAME |
---|---|
1 | 采购经理 |
2 | 采购代表 |
3 | 销售经理 |
4 | 销售代表 |
5 | 销售总监 |
6 | 人力资源部经理 |
- 当插入数据并且要指定自增列的值时,必须要通过语句将 IDENTITY_INSERT 设置为 ON 时,插入语句中必须指定 PERSON_TYPEID 中要插入的列。例如:
SET IDENTITY_INSERT PERSON.PERSON_TYPE ON;
INSERT INTO PERSON.PERSON_TYPE(PERSON_TYPEID, NAME) VALUES( 8, '广告部经理');
INSERT INTO PERSON.PERSON_TYPE(PERSON_TYPEID, NAME) VALUES( 9, '财务部经理');
插入结果如下所示:
PERSON_TYPEID | NAME |
---|---|
1 | 采购经理 |
2 | 采购代表 |
3 | 销售经理 |
4 | 销售代表 |
5 | 销售总监 |
6 | 人力资源部经理 |
8 | 广告部经理 |
9 | 财务部经理 |
- 不允许用户修改自增列的值。
UPDATE PERSON.PERSON_TYPE SET PERSON_TYPEID = 9 WHERE NAME = '广告部经理';
修改失败。对于自增列,不允许 UPDATE 操作。
- 还原 IDENTITY_INSERT 属性。
SET IDENTITY_INSERT PERSON.PERSON_TYPE OFF;
- 插入后再次查询。注意观察自增列当前值的变化。
INSERT INTO PERSON.PERSON_TYPE(NAME) VALUES('市场总监');
PERSON_TYPEID | NAME |
---|---|
1 | 采购经理 |
2 | 采购代表 |
3 | 销售经理 |
4 | 销售代表 |
5 | 销售总监 |
6 | 人力资源部经理 |
8 | 广告部经理 |
9 | 财务部经理 |
10 | 市场总监 |