日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

完整性及

?

數據完整性:

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

數據完整性束主要包括四大

體完整性?

域完整性

引用完整性

自定完整性

體完整性:

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

u 無主鍵值記錄

u 鍵值相同的記錄

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

引用完整性:

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

域完整性

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

自定完整性

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

check(age between 10 and100)

?

束:

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

關鍵束(Primary Key Constraint

關鍵束(Foreign Key Constraint

唯一性束(Unique Constraint

檢查約束(Check Constraint

缺省束(Default Constraint)。

?

關鍵Primary Key Constraint):

的作用:

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

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

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

除。無是建立列PRIMARY KEY是表PRIMARY KEY束,個表只能建一個PRIMARY KEY束。

法如下:

CONSTRAINT constraint_name

PRIMARY KEY [CLUSTERED | NONCLUSTERED]

column_name1[, column_name2,…,column_name16]

列的數據型不限,但此列必是唯一并且非空。

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

建主有幾方式:

束子句

束子句

ALTER TABLE

束子句:

[ CONSTRAINT constraint_name ]

PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]

[ WITH [ FILLFACTOR = fillfactor ] ]

[ ON { filegroup | DEFAULT } ]

一般在建表指定列,明確指定。

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 子句指出存索引的數據文件名稱。

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

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 句:

建了一表,可以使用alter table 句管理束、增加列、改參數。行功能 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

建表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 參數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 型??梢?/span>置起始和增數

如:

create table [table1]

(

id int identity(1,1),

co1 varchar(20)

)

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

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

例:建表table1,插入10 條數據

create table [table1]

(

id int identity(1,1),

co1 varchar(20)

)

insert into table1

values( 'abc')

go 10

現刪除第10 條數據:

delete from table1

where id = 10

再次插入10 條數據:

insert into table1

values( 'abc')

go 10

select * from table1

除主鍵約束:

alter table tb1

drop constraint pk_id

鍵約束:

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

法:

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 子句中指定的列數和列的數據型必REFERENCES 子句中的相同。于列FOREIGN KEY 束,由于參照列唯一確定,所以可以省略,而只需指出被參照列即可。

例:建表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 行數

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)

當一條數中列cBrandld 在表Toybradn 中列cBrandld 不存在,出下面錯誤

消息547級別16,狀0,第1

INSERT 句與FOREIGN KEY "FK__tb2__cBrandld__1A14E395"沖突。沖突生于數據"demo_db",表"dbo.Toybradn",

column 'cBrandld'。

句已止。

當引用外鍵約,若出下列操作:

NO ACTION

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

CASCADE、SET NULL SET DEFAULT

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

CASCADE。

ON DELETE CASCADE

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

ON UPDATE CASCADE

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

ON DELETE SET NULL

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

ON UPDATE SET NULL

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

ON DELETE SET DEFAULT

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

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

ON UPDATE SET DEFAULT

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

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

DEMO

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

alter table tb2

add constraint FK_tb2_cBandid

foreign key

(cBrandld) references Toybradn (cBrandld)

形化界面建外鍵約束:

數據 → 表 → 設計選擇所需建外的列 → 右

?

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

總結

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

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