濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > SQL Server中identity(自增)的用法詳解

SQL Server中identity(自增)的用法詳解

熱門標(biāo)簽:實(shí)體店地圖標(biāo)注怎么標(biāo) 外呼系統(tǒng)會(huì)封嗎 在電子版地圖標(biāo)注要收費(fèi)嗎 武漢AI電銷機(jī)器人 電銷機(jī)器人 深圳 萬利達(dá)綜合醫(yī)院地圖標(biāo)注點(diǎn) 南京電銷外呼系統(tǒng)哪家好 股票配資電銷機(jī)器人 地圖標(biāo)注如何弄全套標(biāo)

一、identity的基本用法

1.含義

identity表示該字段的值會(huì)自動(dòng)更新,不需要我們維護(hù),通常情況下我們不可以直接給identity修飾的字符賦值,否則編譯時(shí)會(huì)報(bào)錯(cuò)

2.語法

列名 數(shù)據(jù)類型 約束 identity(m,n)

m表示的是初始值,n表示的是每次自動(dòng)增加的值

如果m和n的值都沒有指定,默認(rèn)為(1,1)

要么同時(shí)指定m和n的值,要么m和n都不指定,不能只寫其中一個(gè)值,不然會(huì)出錯(cuò)

3.實(shí)例演示

不指定m和n的值

create table student1
(
 sid int primary key identity,
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student1(sname,ssex) values ('張三','男');
insert into student1 values ('李四','女');--可以省略列名
insert into student1 values ('王五','女');

指定m和n的值

create table student2
(
 sid int primary key identity(20,5),
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student2(sname,ssex) values ('張三','男');
insert into student2 values ('李四','女');--可以省略列名
insert into student2 values ('王五','女');

4.刪除一條記錄接著插入

把sid為2的記錄刪除,繼續(xù)插入,新插入的記錄的sid不是2,而是3

create table student3
(
 sid int primary key identity,
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student3(sname,ssex) values ('張三','男');
insert into student3 values ('李四','女');
delete from student3 where sid=2;--把sid為2的記錄刪除
insert into student3 values ('王五','女');

二、重新設(shè)置identity的值

1.語法

dbcc checkident(表名,reseed,n);

n+1表示的是表中identity字段的初始值(n的值可以為0)

也就是說:如果插入的是id為2的記錄,則n的值是1

2.實(shí)例演示

create table student4
(
 sid int primary key identity,
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student4(sname,ssex) values ('張三','男');
insert into student4 values ('李四','女');
delete from student4 where sid=2;--把sid為2的記錄刪除
dbcc checkident('student4',reseed,1);--把student4表中identity字段的初始值重新設(shè)置為1
insert into student4 values ('王五','女');

三、向identity字段插入數(shù)據(jù)

1.語法

set identity_insert 表名 on;

insert into 表名(列名1,列名2,列名3,列名4) values (數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3,數(shù)據(jù)4);

set identity_insert 表名 off;

注意:插入數(shù)據(jù)時(shí)必須得指定identity修飾的字段的名字

2.實(shí)例演示

create table student5
(
 sid int primary key identity(20,5),
 sname nchar(8) not null,
 ssex nchar(1)
)
insert into student5(sname,ssex) values ('張三','男');
insert into student5 values ('李四','女');
insert into student5 values ('王五','女');
set identity_insert student5 on;
/*
insert into student5 values ('黑六','男');--error
insert into student5 values (21,'黑六','男');--error
*/
insert into student5(sid,sname,ssex) values (21,'黑六','男');
set identity_insert student5 off;
/*
insert into student5 values (22,'趙七','女');--error
insert into student5(sid,sname,ssex) values (22,'趙七','女');--error
*/
insert into student5 values ('趙七','女');

補(bǔ)充知識(shí):SQL Server 添加與刪除主鍵約束

PRIMARY KEY 約束唯一標(biāo)識(shí)數(shù)據(jù)庫表中的每條記錄。主鍵必須包含唯一的值。主鍵列不能包含 NULL 值。每個(gè)表都應(yīng)該有一個(gè)主鍵,并且每個(gè)表只能有一個(gè)主鍵。

主鍵約束操作包含了添加約束和刪除約束,修改約束其實(shí)是添加約束或者刪除約束。

添加主鍵約束比較 簡(jiǎn)單,但是刪除一個(gè)沒有約束名的主鍵約束則比較復(fù)雜,如果不是很不了解SQL Server的話則比很難實(shí)現(xiàn)該功能。

主鍵約束操作基本語句

如果是在新建表的時(shí)候添加主鍵約束比較簡(jiǎn)單,直接在列名后加入primary key即可,標(biāo)準(zhǔn)的添加主鍵約束的SQL腳本如下:

create table 表名 (  字段名1 int not null, ...,
  [constraint 約束名] primary key (字段名1, …)
)

其中約束名可選(建議選擇,否則系統(tǒng)會(huì)分配隨機(jī)臨時(shí)名稱)。這種方法可以任意添加多個(gè)或一個(gè)主鍵約束。

對(duì)已有表添加主鍵約束,與上面的腳本類似,如下:

alter table 表名 [add constraint 約束名] primary key(字段名1,... )

其中約束名與上相同,可選,建議指定。

SQL Server刪除主鍵約束與MySQL不同,需要主鍵的約束名稱才能刪除,SQL Server標(biāo)準(zhǔn)的刪除主鍵的腳本如下:

ALTER TABLE 表名DROP CONSTRAINT 約束名

當(dāng)然該語句只能刪除已知約束名的主鍵約束。

刪除未知主鍵約束名的約束

根據(jù)之前的語句判斷,這個(gè)約束名如果之前已經(jīng)指定了那還好,否則此次就沒有辦法刪除了,重點(diǎn)在于如何獲取表中的主鍵約束名,既然可以根據(jù)約束名,那么就說明約束名是存儲(chǔ)在數(shù)據(jù)庫中的,當(dāng)然是存儲(chǔ)在系統(tǒng)表中的,運(yùn)行下SELECT * FROM SYS.OBJECTS 語句看看查詢結(jié)果,數(shù)據(jù)庫中所有的約束都 在里面了,name項(xiàng)以PK大頭的都是主鍵約束,看看它的type_desc是不是PRIMARY_KEY_CONSTRAINT或者type是不是 PK?(當(dāng)然指定的名稱沒使用PK前綴另當(dāng)別論)。

既然已知表名,而且也知道主鍵約束存儲(chǔ)位置,關(guān)鍵就是二者如何關(guān)聯(lián)起來,使得使用表名就可以查詢到主鍵 約束名稱,這其中溝通的橋梁便是parent_object_id。

這里給出的只是object_id,那么又如何找出表的object_id呢?再仔細(xì) 看看剛才的搜索結(jié)果,原來數(shù)據(jù)庫中的相關(guān)信息全在里面,表,函數(shù)等都在里面,而且有自身的object_id。

接下來整合下上面的思路,根據(jù)表名查詢表ID,根據(jù)表ID找到主鍵約束名稱,采用級(jí)聯(lián)方式查詢就可以查詢出來。可以構(gòu)造如下的查詢語句:

SELECT NAME from SYS.OBJECTS WHERE TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND
PARENT_OBJECT_ID = (SELECT OBJECT_ID
FROM SYS.OBJECTS WITH(NOLOCK) WHERE NAME = '表名')

然后NAME就是我們需要的約束名稱了。然后在構(gòu)造一個(gè)上面的刪除約束的SQL語句執(zhí)行就可以了,典型的SQL如下:

ALTER TABLE 表名 DROP CONSTRAINT NAME(約束名)

其他約束都可以采用這種方法進(jìn)行刪除。

以上這篇SQL Server中identity(自增)的用法詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Sql Server中清空所有數(shù)據(jù)表中的記錄
  • SQL server 自增ID--序號(hào)自動(dòng)增加的字段操作
  • SQL Server正確刪除Windows認(rèn)證用戶的方法
  • SQL Server重置IDENTITY屬性種子值操作

標(biāo)簽:泰安 濟(jì)寧 廣東 武威 臺(tái)州 濟(jì)源 安徽 汕頭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Server中identity(自增)的用法詳解》,本文關(guān)鍵詞  SQL,Server,中,identity,自增,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL Server中identity(自增)的用法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL Server中identity(自增)的用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    镇安县| 共和县| 洞口县| 澎湖县| 肇东市| 宁陵县| 澜沧| 榆树市| 揭阳市| 漳浦县| 山东省| 耒阳市| 遂溪县| 鹿邑县| 陆良县| 海安县| 南木林县| 泰州市| 方城县| 韶山市| 汉沽区| 越西县| 泸州市| 富顺县| 灵台县| 舞钢市| 天津市| 永济市| 昆山市| 广河县| 余干县| 敦化市| 柞水县| 五大连池市| 盖州市| 黄陵县| 奇台县| 湘阴县| 镇原县| 江川县| 沙洋县|