溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

DMSQL DM自增列怎么用

發(fā)布時間:2021-11-11 11:05:15 來源:億速云 閱讀:218 作者:小新 欄目:數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)DMSQL DM自增列怎么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

DM自增列的使用
DM自增列定義
1.自增列功能定義
在表中創(chuàng)建一個自增列。該屬性與CREATE TABLE語句一起使用,一個表只能有一個自增列。
語法格式
IDENTITY [ (種子, 增量) ]
參數(shù)
1.種子 裝載到表中的第一個行所使用的值;
2.增量 增量值,該值被添加到前一個已裝載的行的標(biāo)識值上。增量值可以為正數(shù)或負(fù)數(shù),但不能為0。

使用說明
1.IDENTITY 適用于int(-2147483648~+2147483647)、bigint(-263~+263-2)類型的列;每個表只能創(chuàng)建一個自增列;
2.不能對自增列使用DEFAULT 約束;
3.必須同時指定種子和增量值,或者二者都不指定。如果二者都未指定,則取默認(rèn)值(1,1);若種子或增量為小數(shù)類型,報錯;
4.最大值和最小值為該列的數(shù)據(jù)類型的邊界;
5.建表種子和增量大于最大值或者種子和增量小于最小值時報錯;
6.自增列一旦生成,無法更新,不允許用Update語句進(jìn)行修改;
7. 臨時表、列存儲表、水平分區(qū)表、垂直分區(qū)表不支持使用自增列。

2.自增列查詢函數(shù)
1) IDENT_SEED(函數(shù))
語法格式:
IDENT_SEED ('tablename')
功能:返回種子值,該值是在帶有自增列的表中創(chuàng)建自增列時指定的。
參數(shù):tablename:是帶有引號的字符串常量,也可以是變量、函數(shù)或列名。tablename的數(shù)據(jù)類型為char或varchar。其含義是表名,可帶模式名前綴。
返回類型:返回數(shù)據(jù)類型為int / NULL
2) IDENT_INCR(函數(shù))
語法格式:
IDENT_INCR ('tablename')
功能:返回增量值,該值是在帶有自增列的表中創(chuàng)建自增列時指定的。
參數(shù):tablename:是帶有引號的字符串常量,也可以是變量、函數(shù)或列名。tablename的數(shù)據(jù)類型為char或varchar。其含義是表名,可帶模式名前綴。
返回類型:返回數(shù)據(jù)類型為int / NULL
例如用自增列查詢函數(shù)獲得表PERSON_TYPE的自增列的種子和增量信息。

SQL> SELECT IDENT_SEED('PERSON.PERSON_TYPE');
LINEID     IDENT_SEED('PERSON.PERSON_TYPE')
---------- --------------------------------
1          1
used time: 1.529(ms). Execute id is 46903.
SQL> SELECT IDENT_INCR('PERSON.PERSON_TYPE');
LINEID     IDENT_INCR('PERSON.PERSON_TYPE')
---------- --------------------------------
1          1
used time: 0.956(ms). Execute id is 46905.

SET IDENTITY_INSERT 屬性
設(shè)置是否允許將顯式值插入表的自增列中。
語法格式
SET IDENTITY_INSERT [< 模式名>.]< 表名> ON | OFF;
參數(shù)
1.< 模式名> 指明表所屬的模式,缺省為當(dāng)前模式;
2.< 表名> 指明含有自增列的表名。
使用說明
1.IDENTITY_INSERT屬性的默認(rèn)值為OFF。SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運(yùn)行時進(jìn)行的。當(dāng)一個連接結(jié)束,IDENTITY_INSERT屬性將被自動還原為OFF;
2.DM要求一個會話連接中只有一個表的IDENTITY_INSERT 屬性可以設(shè)置為ON,當(dāng)設(shè)置一個新的表IDENTITY_INSERT 屬性設(shè)置為ON時,之前已經(jīng)設(shè)置為ON的表會自動還原為OFF。當(dāng)一個表的IDENTITY_INSERT 屬性被設(shè)置為ON時,該表中的自動增量列的值由用戶指定。如果插入值大于表的當(dāng)前標(biāo)識值(自增列當(dāng)前值),則DM自動將新插入值作為當(dāng)前標(biāo)識值使用,即改變該表的自增列當(dāng)前值;否則,將不影響該自增列當(dāng)前值;
3.當(dāng)設(shè)置一個表的IDENTITY_INSERT 屬性為OFF時,新插入行中自增列的當(dāng)前值由系統(tǒng)自動生成,用戶將無法指定;
4.自增列一經(jīng)插入,無法修改;
5.手動插入自增列,除了將IDENTITY_INSERT設(shè)置為ON,還要求在插入列表中明確指定待插入的自增列列名。插入方式與非IDENTITY表是完全一樣的。如果插入時,既不指定自增列名也不給自增列賦值,則新插入行中自增列的當(dāng)前值由系統(tǒng)自動生成。

舉例說明
例如SET IDENTITY_INSERT 的使用
1) PERSON_TYPE表中的PERSON_TYPEID列是自增列

SQL> select * from person.person_type;
LINEID     PERSON_TYPEID NAME
---------- ------------- --------
1          1             采購經(jīng)理
2          2             采購代表
3          3             銷售經(jīng)理
4          4             銷售代表
5          9             衛(wèi)生員
6          10            保潔員
6 rows got
used time: 12.207(ms). Execute id is 46927.

2) 在該表中插入數(shù)據(jù),自增列的值由系統(tǒng)自動生成。

SQL> INSERT INTO PERSON.PERSON_TYPE(NAME) VALUES('銷售總監(jiān)');
affect rows 1
used time: 0.884(ms). Execute id is 46930.
SQL> INSERT INTO PERSON.PERSON_TYPE(NAME) VALUES('人力資源部經(jīng)理');
affect rows 1
used time: 0.749(ms). Execute id is 46931.
SQL> commit;
executed successfully
used time: 21.221(ms). Execute id is 46933.
SQL> select * from person.person_type;
LINEID     PERSON_TYPEID NAME
---------- ------------- --------------
1          1             采購經(jīng)理
2          2             采購代表
3          3             銷售經(jīng)理
4          4             銷售代表
5          9             衛(wèi)生員
6          10            保潔員
7          11            銷售總監(jiān)
8          12            人力資源部經(jīng)理
8 rows got
used time: 0.445(ms). Execute id is 46934.

3) 當(dāng)插入數(shù)據(jù)并且要指定自增列的值時,必須要通過語句將IDENTITY_INSERT設(shè)置為ON 時,插入語句中必須指定PERSON_TYPEID 中要插入的列。例如:

SQL> SET IDENTITY_INSERT PERSON.PERSON_TYPE ON;
executed successfully
used time: 32.673(ms). Execute id is 46938.
SQL> INSERT INTO PERSON.PERSON_TYPE(PERSON_TYPEID, NAME) VALUES( 14, '廣告部經(jīng)理');
affect rows 1
used time: 0.966(ms). Execute id is 46941.
SQL> INSERT INTO PERSON.PERSON_TYPE(PERSON_TYPEID, NAME) VALUES( 15, '財務(wù)部經(jīng)理');
affect rows 1
used time: 0.788(ms). Execute id is 46943.
SQL> commit;
executed successfully
used time: 25.501(ms). Execute id is 46944.
SQL> select * from person.person_type;
LINEID     PERSON_TYPEID NAME
---------- ------------- --------------
1          1             采購經(jīng)理
2          2             采購代表
3          3             銷售經(jīng)理
4          4             銷售代表
5          9             衛(wèi)生員
6          10            保潔員
7          11            銷售總監(jiān)
8          12            人力資源部經(jīng)理
9          14            廣告部經(jīng)理
10         15            財務(wù)部經(jīng)理
10 rows got
used time: 0.467(ms). Execute id is 46945.

4) 不允許用戶修改自增列的值。

SQL> UPDATE PERSON.PERSON_TYPE SET PERSON_TYPEID = 14 WHERE NAME = '廣告部經(jīng)理';
UPDATE PERSON.PERSON_TYPE SET PERSON_TYPEID = 14 WHERE NAME = '廣告部經(jīng)理';
[-2664]:Error in line: 1
Try to alter identity column [PERSON_TYPEID].
used time: 0.565(ms). Execute id is 0.

5) 還原IDENTITY_INSERT屬性。

SQL> SET IDENTITY_INSERT PERSON.PERSON_TYPE OFF;
executed successfully
used time: 0.597(ms). Execute id is 46951.

6) 插入后再次查詢。注意觀察自增列當(dāng)前值的變化。

SQL> SET IDENTITY_INSERT PERSON.PERSON_TYPE OFF;
executed successfully
used time: 0.597(ms). Execute id is 46951.
SQL> INSERT INTO PERSON.PERSON_TYPE(NAME) VALUES('市場總監(jiān)');
affect rows 1
used time: 1.013(ms). Execute id is 46954.
SQL> commit;
executed successfully
used time: 16.449(ms). Execute id is 46955.
SQL> select * from person.person_type;
LINEID     PERSON_TYPEID NAME
---------- ------------- --------------
1          1             采購經(jīng)理
2          2             采購代表
3          3             銷售經(jīng)理
4          4             銷售代表
5          9             衛(wèi)生員
6          10            保潔員
7          11            銷售總監(jiān)
8          12            人力資源部經(jīng)理
9          14            廣告部經(jīng)理
10         15            財務(wù)部經(jīng)理
11         16            市場總監(jiān)
11 rows got
used time: 1.000(ms). Execute id is 46956.

感謝各位的閱讀!關(guān)于“DMSQL DM自增列怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI