日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

30. SQL -- 完整性及约束(1)

發(fā)布時間:2025/3/20 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 30. SQL -- 完整性及约束(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

完整性及

?

數(shù)據(jù)完整性:

數(shù)據(jù)完整性是指數(shù)據(jù)的精確性和可靠性。它是防止數(shù)據(jù)中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯誤信息的出造成無效操作或錯誤信息而提出的。SQL Server 提供了一些工具來幫助用戶實現(xiàn)數(shù)據(jù)完整性,其中最主要的是:束(Constraint)、和觸發(fā)器(Trigger)。

數(shù)據(jù)完整性束主要包括四大

體完整性?

域完整性

引用完整性

自定完整性

體完整性:

體完整性指的是系數(shù)據(jù)中所有的表都必有主,而且表中不允存在如下的記錄

u 無主鍵值記錄

u 鍵值相同的記錄

SQL Server 中可以通建立PRIMARY KEY束、UNIQUE 束、唯一索引和列的IDENTITY屬性等措施來體完整性。

引用完整性:

引用完整性有也稱參照完整性,引用完整性就是描述體之間關系的。這種限制一個表中某列的取受另一個表的某列的取圍約束的特點就稱引用完整性。在系數(shù)據(jù)中用外Foreign key 也稱外部關鍵)實現(xiàn)引用完整性。

域完整性

域完整性或語義完整性。確保了只有在某一合法范內的才能存到一列中。可以通限制數(shù)據(jù)型、的范和數(shù)據(jù)格式來施域完整性。在SQL Server 中可以通認值Foreign KEYCHECK 束來施域完整性

自定完整性

自定完整性就是針對某一具體域定的數(shù)據(jù)束條件,它反映某一具體用所及的數(shù)據(jù)必滿語義的要求。

check(age between 10 and100)

?

束:

束(Constraint)是Microsoft SQL Server 提供的自保持數(shù)據(jù)完整性的一方法,定了可入表或表的個列中的數(shù)據(jù)的限制條件。在SQL Server 中有5 種約束:

關鍵束(Primary Key Constraint

關鍵束(Foreign Key Constraint

唯一性束(Unique Constraint

檢查約束(Check Constraint

缺省束(Default Constraint)。

?

關鍵Primary Key Constraint):

的作用:

是一個表中能標識唯一行的志(也有其他方法表示唯一行,如唯一列)。主主要用在查詢單調數(shù)據(jù),修改單調數(shù)據(jù)和單調數(shù)據(jù)上。

一般做程序的候,都將表的主鍵設int 型的可自增的列,這樣程的候,很容易區(qū)分數(shù)據(jù)。

關鍵束中(稱主鍵約束)指定表的一列或幾列的合的在表中具有唯一性,即能唯一的指定一行記錄。主鍵約束確保體完整性。一個表中最多有一個主.使用PRIMARY KEY,列的空屬性必義為NOT NULLPRIMARY KEY束可以用于表中一列或多列,用于多列,它被定義為PRIMARY KEY束,否被定義為PRIMARY KEY.SQL Server 動為實PRIMARY KEY束的列建立唯一索引。如果在PRIMARY KEY束中未指定索引,默情況下所建立的索引簇索引(CLUSTERED)。索引只能過刪PRIMARY KEY束或其相表的方法來除,而不能使用DROP INDEX

除。無是建立列PRIMARY KEY是表PRIMARY KEY束,個表只能創(chuàng)建一個PRIMARY KEY束。

法如下:

CONSTRAINT constraint_name

PRIMARY KEY [CLUSTERED | NONCLUSTERED]

column_name1[, column_name2,…,column_name16]

列的數(shù)據(jù)型不限,但此列必是唯一并且非空。

表中已有主鍵為1000 的行,不能再添加主鍵為1000

創(chuàng)建主有幾方式:

束子句

束子句

ALTER TABLE

束子句:

[ CONSTRAINT constraint_name ]

PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]

[ WITH [ FILLFACTOR = fillfactor ] ]

[ ON { filegroup | DEFAULT } ]

一般在創(chuàng)建表指定列,明確指定

create table tb7

(

txcode char(10) primary key,

docno char(20),

docseq smallint,

part varchar(30),

txqty numeric(12,4)

)

束子句:

[ CONSTRAINT constraint_name ]

PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]

{ column [,...n] }

[ WITH [ FILLFACTOR = fillfactor ] ]

[ ON { filegroup | DEFAULT } ]

PRIMARY KEY束定中,WITH 子句PRIMARY KEY束所建立索引的面填充度,ON 子句指出存索引的數(shù)據(jù)文件名稱。

束子句是在表定義結尾定鍵約束。表束子句是CREATE TABLE 句的一部分,如果束子句有錯誤,整個句將失,表不會被創(chuàng)建。

create table tb8

(txcode char(10),

docno char(20),

docseq smallint,

part varchar(30),

txqty numeric(12,4),

CONSTRAINT [pk_tb8] PRIMARY KEY CLUSTERED

(

[txcode] ASC,

[docno] ASC,

[docseq] ASC

)

)

束子句允包括多個束,使用分隔一個束定

ALTER TABLE 句:

創(chuàng)建了一表,可以使用alter table 句管理束、增加列、改參數(shù)。執(zhí)行功能 ALTER

Add a constraint ?ALTER TABLE table_name ADD CONSTRAINT etc

Drop a constraint ?ALTER TABLE table_name DROP CONSTRAINT etc

Disable a constraint ALTER TABLE table_name DISABLE CONSTRAINT etc

Enable a constraint ALTER TABLE table_name ENABLE CONSTRAINT etc

創(chuàng)建表tb1:

create table tb1

(id int identity(1,1),

co1 char(10),

co2 varchar(30),

co3 varchar(40),

co4 bit)

需將列idco1 義為,由于id 是屬于自增列,因此默屬性不空,co1 空,因此使用alter table 命令修改列co1 參數(shù)not null

alter table tb1

alter column co1 char(10) not null

鍵約束,列字段idco1

alter table tb1

add constraint PK_id primary key

(id,co1)

看表詳細情況:

sp_help tb1

自增列:

自增列的應為int bigint 型。可以置起始和增數(shù)

如:

create table [table1]

(

id int identity(1,1),

co1 varchar(20)

)

如上代次插入數(shù)值時,列id 初始1,然后依次

除其中某條數(shù)據(jù)(如id=10,再次插入數(shù)據(jù)id 從將11 始,即使用一次后,不會再使用第二次。

例:創(chuàng)建表table1,插入10 條數(shù)據(jù)

create table [table1]

(

id int identity(1,1),

co1 varchar(20)

)

insert into table1

values( 'abc')

go 10

現(xiàn)刪除第10 條數(shù)據(jù):

delete from table1

where id = 10

再次插入10 條數(shù)據(jù):

insert into table1

values( 'abc')

go 10

select * from table1

除主鍵約束:

alter table tb1

drop constraint pk_id

鍵約束:

關鍵束(稱外鍵約束)定了表之系。當一個表中的數(shù)據(jù)依于另一個表中的數(shù)據(jù),你可以使用外鍵約束避免兩個表之的不一致性。FOREIGN KEY表中一列或多列料提供參照完整性。FOREIGN KEY,要求在被參照表中定PRIMARY KEY束或UNIQUE 束。FOREIGN KEY束限制插入到表中被束列的在被參照表中已經(jīng)存在。

法:

CONSTRAINT constraint_name

FOREIGN KEY column_name1[, column_name2,…,column_name16]

REFERENCES ref_table [ ref_column1[,ref_column2,…, ref_column16] ]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ] ]

[ NOT FOR REPLICATION ]

FOREIGN KEY 束的定格式

[ CONSTRAINT constraint_name ]

FOREIGN KEY [ ( column [,...n] ) ]

REFERENCES ref_table [ ( ref_column [,...n] ) ]

[ NOT FOR REPLICATION ]

FOREIGN KEY 束的定格式

[ CONSTRAINT constraint_name ]

[ FOREIGN KEY ]

REFERENCES ref_table [ ( ref_column ) ]

[ NOT FOR REPLICATION ]

其中,ref_table 被參照表,ref_column 指出被參照表中的被參照列。被參照表中必具有 PRIMARY KEY 束和UNIQUE 束。

FOREIGN KEY 束中,FOREIGN KEY 子句中指定的列數(shù)和列的數(shù)據(jù)型必REFERENCES 子句中的相同。于列FOREIGN KEY 束,由于參照列唯一確定,所以可以省略,而只需指出被參照列即可。

例:創(chuàng)建表tb2,在列cBrandld鍵約束,能照表Toybradn中列cBrandld.

create table tb2

(

ctoyid varchar(10),

vtoyname varchar(20),

vtoydescription varchar(20),

ccategoryld varchar(20),

mtoyrate money,

cBrandld char(3) references Toybradn(cBrandld),

imphoto p_w_picpath,

silowerage smallint,

siupperage smallint,

sitoyweight smallint,

vtoyimgpath varchar(50)

)

插入2 行數(shù)

insert into tb2

values('p0001','bus','A-B1','BIG','150.00','P01',null,3,4,null,null)

insert into tb2

values('p0001','bus','A-B1','BIG','150.00','S01',null,3,4,null,null)

當一條數(shù)中列cBrandld 在表Toybradn 中列cBrandld 不存在,出現(xiàn)下面錯誤

消息547級別16,狀態(tài)0,第1

INSERT 句與FOREIGN KEY "FK__tb2__cBrandld__1A14E395"沖突。沖突發(fā)生于數(shù)據(jù)"demo_db",表"dbo.Toybradn",

column 'cBrandld'

句已止。

當引用外鍵約,若出現(xiàn)下列操作:

NO ACTION

指定如果試圖刪/修改某一行,而行的被其他表的現(xiàn)有行中的外所引用,則產(chǎn)錯誤并回DELETE/UPDATE 句。

CASCADESET NULL SET DEFAULT

過刪除或更新鍵值來影響指定具有外鍵關系的表,些外鍵關系可追溯到在其中行修改的表。如果表也定級聯(lián)引用操作,那指定的級聯(lián)操作也將用于除或更新的那些行。不能具有 timestamp 列的外或主指定

CASCADE

ON DELETE CASCADE

指定如果試圖刪除某一行,而行的被其他表的現(xiàn)有行中的外所引用,也將除所有包含那些外的行。

ON UPDATE CASCADE

指定如果試圖更新某一行中的鍵值,而行的鍵值被其他表的現(xiàn)有行中的外所引用,則組成外的所有也將更新到為該鍵指定的新(如果 timestamp 列是外或被引用的一部分,不能指定 CASCADE)

ON DELETE SET NULL

指定如果試圖刪除某一行,而行的被其他表的現(xiàn)有行中的外所引用,則組成被引用行中的外的所有將被NULL。目表的所有外列必,此束才可執(zhí)行。

ON UPDATE SET NULL

指定如果試圖更新某一行,而行的被其他表的現(xiàn)有行中的外所引用,則組成被引用行中的外的所有將被NULL。目表的所有外列必,此束才可執(zhí)行。

ON DELETE SET DEFAULT

指定如果試圖刪除某一行,而行的被其他表的現(xiàn)有行中的外所引用,則組成被引用行中的外的所有將被的默認值。目表的所有外列必具 有默認值,此束才可執(zhí)行。如果某個列可,并且未式的默認值會使用 NULL 為該列的式默認值。因 ON DELETE SET DEFAULT 置的任何非空在主

表中必對應,才能維護鍵約束的有效性。

ON UPDATE SET DEFAULT

定如果試圖更新某一行,而行的被其他表的現(xiàn)有行中的外所引用,則組成被引用行中的外的所有將被的默認值。目表的所有外列必具 有默認值,此束才可執(zhí)行。如果某個列可,并且未式的默認值會使用 NULL為該列的式默認值。因 ON UPDATE SET DEFAULT 置的任何非空在主表

中必對應,才能維護鍵約束的有效性。

DEMO

若表已存在,且未定鍵約束,可使用ALTER TABLE 來定鍵約束:

alter table tb2

add constraint FK_tb2_cBandid

foreign key

(cBrandld) references Toybradn (cBrandld)

形化界面創(chuàng)建外鍵約束:

數(shù)據(jù) → 表 → 設計選擇所需創(chuàng)建外的列 → 右

?

轉載于:https://blog.51cto.com/57388/1627841

總結

以上是生活随笔為你收集整理的30. SQL -- 完整性及约束(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。