㈠ 在sql中,唯一索引是什麼喲
這種索引和前面的「普通索引」基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用以下幾種方式創建:
創建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
創建表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );
㈡ SQL中unique[唯一]與primary key[主建] 的區別,我覺得它們都是應用於標識表中的唯一實體。
sql server聯機叢書都說的很清楚了:
可使用 UNIQUE 約束確保在非主鍵列中不輸入重復值。盡管 UNIQUE 約束和 PRIMARY KEY約束都強制唯一性,但在強制下面的唯一性時應使用 UNIQUE 約束而不是 PRIMARY KEY 約束:
非主鍵的一列或列組合。
一個表可以定義多個 UNIQUE 約束,而只能定義一個 PRIMARY KEY 約束。
允許空值的列。
允許空值的列上可以定義 UNIQUE 約束,而不能定義 PRIMARY KEY 約束。
㈢ sqlserver2008 什麼是唯一鍵 怎樣設置唯一鍵
唯一鍵分為主鍵(主鍵索引)和唯一索引(UNIQUE 索引),意思就是在某一列中不能出現重復值,但主鍵索引和唯一索引的區別是,主鍵索引不允許為空,而唯一索引允許為空,其中空(null)是可以不唯一的。
設置方法分別如下:
創建主鍵索引:
主鍵名primarykey(欄位名);
創建唯一索引:
_cindexONmytable(mycolumn);
㈣ 在SQL語句中提取唯一值怎麼寫
加上distinct是去重復值,如果是要取某個欄位在表裡只出現過一次的可以寫
select 欄位 from 表 where 欄位 in (select 欄位 from 表 group by 欄位 having count(欄位)=1)
㈤ SQL Server 2005中,建表時有個是否「唯一」,這個唯一指什麼唯一
設置自增長的,沒錯,唯一的話就是唯一。。。額,也就是在表中只能出現一次,比如身份證的列設置唯一。那麼身份證號碼就不能出現有一樣的
㈥ SQL什麼是唯一約束 什麼是主鍵約束
在sql中唯一約束和主鍵約束應用性在我的理解上幾乎是一樣的.
就是確保某一個列或者某幾個列的(組合)值唯一.
而兩者的區別在於單個表上唯一約束可以定義多個,而且欄位可以為空.
主鍵約束在單個表上只能定義一個,而且欄位不能為空.
應用性上,單個表涉及到人員的,只需要定義一個主鍵約束就可以了.
希望能幫到你
㈦ 用SQL語句取唯一數據
如果是唯一數據的,肯定是有約束條件來確認結果的唯一性,肯定會用到where語句。
sql:select * from tablename where id ='10';
解釋:如果id是主鍵或者是不重復欄位,那麼通過固定的id條件,就可以取出唯一數據。
㈧ sql 查詢唯一性
sql 唯一性查詢
可以使用distinct()去重來達到目的
但是使用distinct()後只能顯示一列
還可以使用group by分組來達到目的
比如有如下userinfo用戶信息表
id userid info
1 1 xfl
2 1 xml
3 2 zkl
4 2 kmls
sql語句
select distinct userid from userinfo;
結果
userid
1
2
select * from userinfo group by userid ;
結果
id userid info
1 1 xfl
3 2 zkl
㈨ SQL Server唯一索引和非唯一索引的區別簡析
SQL Server創建索引時,可以指定Unique使之成為唯一索引。「唯一」顧名思義,但是兩都到底有什麼區別呢?因為索引也是一種物理結構,所以還是要從存儲和結構上分析。
索引結構分葉級和非葉級,分析時我們要分開來看,這個很重要。
文中涉及的索引行大小計算,參考MSDN估計資料庫大小索引部分。
1. 非唯一聚集索引和唯一聚集索引
創建兩個測試表,各10000條整數,tb1唯一,tb2非唯一,有1000條為9999的重復值。
view sourceprint?
01.<img onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_402704').style.display='none'; document.getElementById('Code_Open_Image_402704').style.display='inline'; document.getElementById('Code_Open_Text_402704').style.display='inline';"id="Code_Closed_Image_402704"align="top"src=""width="11"height="16"style="display: none;"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif"><img onclick="this.style.display='none'; document.getElementById('Code_Open_Text_402704').style.display='none'; getElementById('Code_Closed_Image_402704').style.display='inline'; getElementById('Code_Closed_Text_402704').style.display='inline';"id="Code_Open_Image_402704"style="display: none;"align="top"src=""width="11"height="16"><img alt="載入中..."title="圖片載入中..."src="http://www.it165.net/statics/images/s_nopic.gif">Codecreate table tb1
02.(col1int);
03.declare@iint=1
04.while@i<10001
05.begin
06.insert into tb1 values(@i);
07.set@i=@i+1;
08.end;
09.create unique clustered index ucix on tb1 (col1)
10.go
11.-------
12.create table tb2
13.(col2int);
14.declare@iint=1
15.while@i<9001
16.begin
17.insert into tb2 values(@i);
18.set@i=@i+1;
19.end;
20.go
21.insert into tb2 values(9999)
22.go1000;
23.create clustered index cix on tb2 (col2)
24.go
先查詢索引的一些基本狀況:
發現多出一個UNIQUIFIER,同樣葉級也是一樣。MSDN說明:
「如果聚集索引不是唯一的索引,SQL Server 將添加在內部生成的值(稱為唯一值)以使所有重復鍵唯一。此四位元組的值對於用戶不可見。僅當需要使聚集鍵唯一以用於非聚集索引中時,才添加該值。」
還有UNIQUIFIER不是一個全局自增列,重復記錄增加時此值會發生改變,並且它是一個可為null的變長列。
現在來算一算索引行大小:
兩個表都是只有一個int型可為NULL的欄位,而聚集索引葉級是存儲數據本身
葉級是一個4位元組的INT列,無變長列,加上3位元組的NULL點陣圖,再加上4位元組的行頭開銷:兩個表的葉級minSize =4+0+3+4=11
非葉級是一個4位元組的INT列,無變長列,加上3位元組的NULL點陣圖,加上1位元組的行頭開銷,再加6位元組的子頁指針:兩個表的非葉級minSize=4+0+3+1+6=14
tb1的索引行大小是一致的minSize=maxSize,因為它是唯一的。tb2的索引行大小不一致,有大有小,大的索引行是因為:a)不唯一 b)UNIQUIFIER
唯一標識列增加了2+1*2+4=8位元組開銷,tb2的min和max相差就是這8位元組。
tb2的葉級maxSize=4+8+3+4=19
tb2的非葉級maxSize=4+8+3+1+6=22
小結:非唯一聚集索引為保證索引鍵值唯一性,會生成UNIQUIFIER與鍵列一起組成索引鍵值。同時無論在葉級還是非葉頁級,都比唯一索引佔用更多存儲空間。
㈩ sql 多個欄位有相同值,如何求唯一值
比如你的表名為test,想查詢 「外型」 列,裡面有 張三兩個、張一、李一 各一個。
第一種方法:用Group by語句: select 外型 from test Group by 外型
結果顯示為:
張三
張一
李一
第二種方法:用distinct語句: select disctinct 外型 from test
結果和第一種一樣