唯一性約束
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),長(zhǎng)豐企業(yè)網(wǎng)站建設(shè),長(zhǎng)豐品牌網(wǎng)站建設(shè),網(wǎng)站定制,長(zhǎng)豐網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,長(zhǎng)豐網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
1) 唯一性約束用來(lái)限制不受主鍵約束的列上的數(shù)據(jù)的唯一性,用于作為訪問(wèn)某行的可選手段,一個(gè)表上可以放置多個(gè)唯一性約束.
2) 只要唯一就可以更新.
3) 即表中任意兩行在 指定列上都不允許有相同的值,允許空(NULL).
4) 一個(gè)表上可以放置多個(gè)唯一性約束
唯一性索引
創(chuàng)建唯一索引可以確保任何生成重復(fù)鍵值的嘗試都會(huì)失敗。
約束和索引, 前者是用來(lái)檢查數(shù)據(jù)的正確性,后者用來(lái)實(shí)現(xiàn)數(shù)據(jù)查詢的優(yōu)化,目的不同。
唯一性約束與唯一索引有所不同:
1)創(chuàng)建唯一約束會(huì)在Oracle中創(chuàng)建一個(gè)Constraint,同時(shí)也會(huì)創(chuàng)建一個(gè)該約束對(duì)應(yīng)的唯一索引。
2).創(chuàng)建唯一索引只會(huì)創(chuàng)建一個(gè)唯一索引,不會(huì)創(chuàng)建Constraint。
也就是說(shuō)其實(shí)唯一約束是通過(guò)創(chuàng)建唯一索引來(lái)實(shí)現(xiàn)的。
在刪除時(shí)這兩者也有一定的區(qū)別:
刪除唯一約束時(shí)可以只刪除約束而不刪除對(duì)應(yīng)的索引,所以對(duì)應(yīng)的列還是必須唯一的,
而刪除了唯一索引的話就可以插入不唯一的值
1、首先,打開(kāi)sqlserver軟件,右鍵點(diǎn)擊要設(shè)計(jì)的表選擇設(shè)計(jì),選中一列右鍵設(shè)置主鍵,該列就設(shè)置成了主鍵了,刪除主鍵同理,設(shè)置好了前面有一把鑰匙。
2、設(shè)置唯一鍵和索引鍵也是右鍵選中的列(空白的地方也行),點(diǎn)擊‘索引/鍵’。
3、這里注意,剛剛選擇的列不是在那個(gè)選中的列上設(shè)置,而是以整個(gè)表來(lái)設(shè)置的,因此能看到剛才設(shè)置的主鍵。
4、現(xiàn)在不是改信息而是新建一個(gè),點(diǎn)擊添加。
5、然后點(diǎn)擊列,出來(lái)隱藏的省略號(hào),再點(diǎn)擊它。
6、選擇要設(shè)置的列,后面可以設(shè)置排序。
7、再點(diǎn)擊類型可以設(shè)置唯一鍵/索引/列存儲(chǔ)索引,選擇需要設(shè)置的。
8、最后就設(shè)置完成了,點(diǎn)擊保存,到此就完成了。
主鍵約束
SELECT
tab.name AS [表名],
idx.name AS [主鍵名稱],
col.name AS [主鍵列名]
FROM
sys.indexes idx
JOIN sys.index_columns idxCol
ON (idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
AND idx.is_primary_key = 1)
JOIN sys.tables tab
ON (idx.object_id = tab.object_id)
JOIN sys.columns col
ON (idx.object_id = col.object_id
AND idxCol.column_id = col.column_id);
唯一約束
SELECT
tab.name AS [表名],
idx.name AS [約束名稱],
col.name AS [約束列名]
FROM
sys.indexes idx
JOIN sys.index_columns idxCol
ON (idx.object_id = idxCol.object_id
AND idx.index_id = idxCol.index_id
AND idx.is_unique_constraint = 1)
JOIN sys.tables tab
ON (idx.object_id = tab.object_id)
JOIN sys.columns col
ON (idx.object_id = col.object_id
AND idxCol.column_id = col.column_id);
外鍵約束
select
oSub.name AS [子表名稱],
fk.name AS [外鍵名稱],
SubCol.name AS [子表列名],
oMain.name AS [主表名稱],
MainCol.name AS [主表列名]
from
sys.foreign_keys fk
JOIN sys.all_objects oSub
ON (fk.parent_object_id = oSub.object_id)
JOIN sys.all_objects oMain
ON (fk.referenced_object_id = oMain.object_id)
JOIN sys.foreign_key_columns fkCols
ON (fk.object_id = fkCols.constraint_object_id)
JOIN sys.columns SubCol
ON (oSub.object_id = SubCol.object_id
AND fkCols.parent_column_id = SubCol.column_id)
JOIN sys.columns MainCol
ON (oMain.object_id = MainCol.object_id
AND fkCols.referenced_column_id = MainCol.column_id)
Check約束
SELECT
tab.name AS [表名],
chk.name AS [Check約束名],
col.name AS [列名],
chk.definition
FROM
sys.check_constraints chk
JOIN sys.tables tab
ON (chk.parent_object_id = tab.object_id)
JOIN sys.columns col
ON (chk.parent_object_id = col.object_id
AND chk.parent_column_id = col.column_id)
SQLServer?中有五種約束,?Primary Key?約束、?Foreign Key?約束、?Unique?約束、?Default?約束和?Check?約束。