㈠ sql 2005 『CHECK約束』 和 『規則』 區別
一、約束
約束定義關於列中允許值的規則,是強制完整性的標准機制。
使用約束優先於使用觸發器、規則和默認值。查詢優化器也使用約束定義生成高性能的查詢執行計劃。SQL Server 2005支持五類約束:
1. NOT NULL指定不接受NULL值的列。
2. CHECK 約束對可以放入列中的值進行限制,以強制執行域的完整性。CHECK約束拒絕所有在檢測條件中取值為false的值。可以為每列指定多個CHECK約束。下例顯示名為chk_id約束的創建,該約束確保只對此關鍵字輸入指定范圍內的數字,以進一步強制執行主鍵的域。
CREATE TABLE cust_sample
(
cust_id int PRIMARY KEY,
cust_name char(50),
cust_address char(50),
cust_credit_limit money,
CONSTRAINT chk_id CHECK(cust_id BETWEEN 0 and 10000)
)
3. UNIQUE約束:對於 UNIQUE 約束中的列,表中不允許有兩行包含相同的非空值。主鍵也強制執行唯一性,但主鍵不允許空值。UNIQUE 約束優先於唯一索引。
4. PRIMARY KEY 約束標識列或列集,這些列或列集的值唯一標識表中的行。在一個表中,不能有兩行包含相同的主鍵值。不能在主鍵內的任何列中輸入NULL值。在資料庫中NULL是特殊值,代表不同於空白和0值的未知值。建議使用一個小的整數列作為主鍵。每個表都應有一個主鍵。
一個表中可以有一個以上的列組合,這些組合能唯一標識表中的行,每個組合就是一個候選鍵。資料庫管理員從候選鍵中選擇一個作為主鍵。例如,在part_sample表中,part_nmbr和part_name都可以是候選鍵,但是只將part_nmbr選作主鍵。
CREATE TABLE part_sample
(
part_nmbr int PRIMARY KEY,
part_name char(30),
part_weight decimal(6,2),
part_color char(15)
)
5. FOREIGN KEY約束標識表之間的關系。
一個表的外鍵指向另一個表的候選鍵。當外鍵值沒有候選鍵時,外鍵可防止操作保留帶外鍵值的行。在下例中,order_part 表建立一個外鍵引用前面定義的part_sample表。通常情況下,order_part在order表上也有一個外鍵,下面只不過是一個簡單示例。
CREATE TABLE order_part
(
order_nmbr int,
part_nmbr int
FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION,
qty_ordered int
)
如果一個外鍵值沒有候選鍵,則不能插入帶該值(NULL除外)的行。如果嘗試刪除現有外鍵指向的行,ON DELETE子句將控制所採取的操作。
ON DELETE子句有兩個選項:
A、NO ACTION指定刪除因錯誤而失敗。
B、CASCADE 指定還將刪除包含指向已刪除行的外鍵的所有行。
如果嘗試更新現有外鍵指向的候選鍵值,ON UPDATE 子句將定義所採取的操作。它也支持NO ACTION和CASCADE選項。
列約束和表約束
約束可以是列約束或表約束:
列約束被指定為列定義的一部分,並且僅適用於那個列(前面的示例中的約束就是列約束)。
表約束的聲明與列的定義無關,可以適用於表中一個以上的列。
當一個約束中必須包含一個以上的列時,必須使用表約束。
例如,如果一個表的主鍵內有兩個或兩個以上的列,則必須使用表約束將這兩列加入主鍵內。假設有一個表記錄工廠內的一台計算機上所發生的事件。假定有幾類事件可以同時發生,但不能有兩個同時發生的事件屬於同一類型。這一點可以通過將type列和time列加入雙列主鍵內來強制執行。
CREATE TABLE factory_process
(
event_type int,
event_time datetime,
event_site char(50),
event_desc char(1024),
CONSTRAINT event_key PRIMARY KEY(event_type,event_time)
)
二、規則:
規則是一個向後兼容的功能,用於執行一些與CHECK約束相同的功能。CHECK約束是用來限制列值的首選標准方法。CHECK約束比規則更簡明,一個列只能應用一個規則,但是卻可以應用多個CHECK約束。CHECK約束作為CREATE TABLE 語句的一部分進行指定,而規則以單獨的對象創建,然後綁定到列上。
下例創建一個規則,執行與前面主題中的CHECK約束示例相同的功能。SQL Srver2005 首選的方法是 CHECK 約束。
CREATE RULE id_chk AS @id BETWEEN 0 and 10000
GO
CREATE TABLE cust_sample
(
cust_id int
PRIMARY KEY,
cust_name char(50),
cust_address char(50),
cust_credit_limit money,
)
GO
sp_bindrule id_chk,'cust_sample.cust_id'
GO
㈡ sql server 2005中外鍵約束的使用
altertable[tbname外鍵表]
addconstraintFK_外鍵約束名foreignkey(外鍵列)
references[tbname主鍵表](主鍵列)--所引用列必須是唯一鍵
onupdatecascade--可選級聯更新
ondeletecascade--可選級聯刪除
㈢ 【例】SQL server 2005 中 check約束的用法
alter table [tbname外鍵表]
add constraint fk_外鍵約束名 foreign key (外鍵列)
references [tbname主鍵表](主鍵列)--所引用列必須是唯一鍵
on update cascade--可選級聯更新
on delete cascade--可選級聯刪除
㈣ SQL2005怎麼設置約束值的范圍。
CREATE TABLE Table_1
(
studentnum char(9),
courseID int,
DailyGrade decimal(5, 1) CHECK (DailyGrade>=0 AND DailyGrade<=20),
PracticeGrade decimal(5, 1)CHECK (PracticeGrade>=0 AND PracticeGrade<=30),
TestGrade decimal(5, 1) CHECK (TestGrade>=0 AND TestGrade<=50),
Grade decimal(5, 1),
CONSTRAINT pk_table_1 PRIMARY KEY CLUSTERED
(studentnum,
courseID)
)
go
後面總評就不會了 還沒學到那
㈤ sql server 2005給多列添加組合唯一性約束
altertable表名
addconstraint約束名unique(列名1,列名2)
㈥ sql server 2005創建約束及查詢
ADD CONSTRAINT PK_UID PRIMARY KEY(UID), 多了個逗號,在第二個IF前面就是上面這句德最後那個逗號是多餘的 要去掉 可以用GO隔開兩個T_Sql語句
㈦ sql Server 2005約束.
1.主鍵每個表只有一個,而且是聚簇索引,Unique則可以有多個。
2.創建引用完整性實際上就是建立主鍵和外鍵的關系
3.主鍵、外鍵的創建可以使用SQL語句或者使用SQL Server的圖形化管理界面。以你的表為例,學員信息表中應該建立學員編號一列,將其設置為主鍵,成績表中也應該有學員編號一列,設置為外鍵引用學員信息表中的學員編號。
4.還是以你的表為例,建立了成績表的外鍵之後,就不能輸入不存在的學員編號的成績了;而且當某個學員編號有成績時,你也不能在學員信息表中刪除這個學員的記錄。從而保證數據的一致性。
㈧ SQL2005中default約束
ALTER TABLE 表名 add DEFAULT ('修改後的默認值') for 欄位名 WITH VALUES
註:如果該欄位以前已經有默認值了,在修改之前需要先將約束刪除,否則會報錯
刪約束的SQL:
Alter table 表名 drop constraint 約束名
關於約束名,需要先查一下,
查約束名的SQL:
select c.name from sysconstraints a
inner join syscolumns b on a.colid=b.colid
inner join sysobjects c on a.constid=c.id
where a.id=object_id('表名')
and b.name='欄位名'
㈨ sql sever 2005修改數據表及約束
alter table student2add s2classid tinyint;
alter table student2 alter column s2name varchar(25);
altertable student2 drop column s2school;
alter table course2 alter column c2name varchar(15);
alter table course2 add constraint ck1check(c2time>16);
alter table choose2 add constraint nldefault(null) for sc2score;
㈩ SQL2005中的外鍵約束主要有什麼作用(求詳細答案)
外鍵是表中的一個列,其值必須在另一個表的主鍵中列出。外鍵主要作用是保證數據引用的完整性,定義外鍵後,不允許刪除在另一個表中具有關聯行的行。
比如,有一個客戶表a,一個訂單表B:客戶ID為表A的主鍵,每個客戶都有唯一的ID號,訂單號為表B的主鍵,每個訂單都有唯一的訂單號。訂單表中的客戶ID列中的值不一定是唯一的,允許一個客戶有多個訂單,但客戶的ID值必須在客戶表A中已存在。定義外鍵後,要刪除客戶表A中的行,必須確保客戶沒有在訂單表B中沒有訂單才能刪除成功。