close

1. 什麼是Constraint

Constraint為限制哪一些資料才能儲存至表格中之語法,因此返回的資料必須遵循這個準則。而這些限制語法可以在表格初創時藉由CREATE TABLE語句來指定一列或多列共用一個限制語法,或是之後藉由ALTER TABLE語句來指定。

 

2. 常見的Constraint之分類

not null(非空值限制)在預設的情況下,一個欄位是允許有null值的。所以,如果不允許某個欄位含有null值,就必須對那個欄位做出not null的指定。

   範例-建立員工資料表(Employee),並限制主鍵與First_NameLast_Name不能為空值:

create table Employee

(EID integer not null primary key,

First_Name varchar(15) not null,

Last_Name varchar(15) not null,

Address varchar(30));

 

unique(唯一值限制)保證一個欄位中的所有資料皆是不重複的值。而一個被指定為主鍵的欄位也一定會含有unique的特性,但是一個unique的欄位並不一定會是一個主鍵,需注意!!

   建置新表格時設定「唯一限制」的方式:

create table Employee

(EID integer not null unique,

Last_Name varchar(30),

First_Name varchar(30));

   建置新表格時替「唯一限制欄位命名與多欄位」的方式:

create table Employee

(EID integer not null,

Last_Name varchar(30) not null,

First_Name varchar(30) not null,

Address varchar(30),

constraint stu_Employee_Id unique (EID, Last_Name, First_Name));

※限制EIDLast_NameFirst_Name這三個欄位為唯一限制,constraint後面接著的即是此「多欄位組合成唯一鍵的名稱」

   改變現有表格架構來「設定唯一限制」的方式:

alter table Employee add unique (EID);

   改變現有表格架構來「設定唯一限制欄位命名與多欄位」的方式:

alter table Employee add constraint stu_Employee_Id unique (EID, Last_Name, First_Name);

   改變現有表格架構來「移除唯一限制」的方式:

alter table Employee drop constraint stu_Employee_Id;

 

check(檢查限制)保證一個欄位中的所有資料都是符合某些條件。例如:Age integer check(Age>0)

   建置新表格時設定「檢查限制」的方式:

create table Employee

(EID integer not null check (EID>0),

Last_Name varchar(30),

First_Name varchar(30));

   建置新表格時替「檢查限制欄位命名與多欄位」的方式:

create table Employee

(EID integer not null,

Last_Name varchar(30) not null,

First_Name varchar(30) not null,

Address varchar(30),

constraint chk_Employee check (EID>0 and Last_Name != ‘XXX’));

   改變現有表格架構來「設定檢查限制」的方式:

alter table Employee add check (EID>0);

   改變現有表格架構來「設定多欄位的檢查限制」的方式:

alter table Employee add constraint chk_Employee check (EID>0 and Last_Name != ‘XXX’);

   改變現有表格架構來「移除檢查限制」的方式:

alter table Employee drop constraint chk_Employee;

 

primary key(主鍵限制)Primary Key中的每一筆資料都是表格中的唯一值。一個資料表中只能有一個primary key,但是可以有多個unique。主鍵可以包含一或多個欄位,所以當主鍵包含多個欄位時,又稱之為組合鍵 (Composite Key)

   建置新表格時設定「主鍵」的方式:

create table Employee

(EID integer not null primary key,

Last_Name varchar(30),

First_Name varchar(30));

   建置新表格時替「主鍵命名與多欄位的組合鍵」的方式:

create table Employee

(EID integer not null,

Last_Name varchar(30) not null,

First_Name varchar(30) not null,

Address varchar(30),

constraint stu_Employee_Id primary key (EID, Last_Name, First_Name));

   改變現有表格架構來「設定主鍵」的方式:

alter table Employee add primary key(EID);

   改變現有表格架構來「設定主鍵限制欄位命名與多欄位」的方式:

alter table Employee add constraint stu_Employee_Id primary key (EID, Last_Name, First_Name);

   改變現有表格架構來「移除主鍵」的方式:

alter table Employee drop constraint stu_Employee_Id;

 

foreign key(外來鍵限制)foreign key是一個(/數個)指向其他表格中主鍵的欄位。外來鍵的目的是確定資料參考的完整性。

   建置新表格時設定「外來鍵」的方式:

create table Employee

(EID integer not null unique primary key,

First_Name varchar(15) not null,

Last_Name varchar(15) not null,

Address varchar(30),

Age integer check(Age>0),

Birth_Date datetime,

Department_DID integer references Department (DID)

< Department_DID integer foreign key (Department_DID) references Department(DID) >

);

   建置新表格時替「外來鍵命名與多欄位的組合鍵」的方式:

create table Employee

(EID integer not null,

Last_Name varchar(30) not null,

First_Name varchar(30) not null,

Address varchar(30),

constraint stu_Department_DID foreign key (Department_DID) references Department(DID));

   改變現有表格架構來設定「外來鍵」的方式:

alter table Employee add foreign key (Department_DID) references Department (DID);

   改變現有表格架構來「設定外來鍵限制欄位命名與多欄位」的方式:

alter table Employee add constraint stu_Department_DID foreign key (Department_DID) references Department(DID);

   改變現有表格架構來「移除外來鍵」的方式:

alter table Employee drop constraint stu_Department_DID;

 

default(預設限制)用來設定欄位的預設值,即當在insert資料時,若該欄位沒指定值的話,則會採用預設值之內容。

   建置新表格時設定「預設值」的方式:

create table Employee

(EID integer not null primary key,

Last_Name varchar(30) not null,

First_Name varchar(30) not null,

Address varchar(30) default未知’);

   改變現有表格架構來「設定預設值」的方式:

alter table Employee add constraint df_Address default未知for Address;

< alter table Employee alter column Address set default未知’;>

   改變現有表格架構來「移除預設值」的方式:

alter table Employee drop default Address;

< alter table Employee alter column Address drop default;>

 

● increment(唯一自動遞增資料值限制)其於每次新增資料時,欄位值都會「自動遞增資料值」,且該欄位值為唯一的。用途就像是一個識別碼或流水號,因此increment常與 Primary Key一起搭配使用。而SQL Server語法是使用identity這個關鍵字。

   範例-建立員工資料表(Employee),並設定主鍵需有一識別碼:

create table Employee

(EID integer primary key identity,

First_Name varchar(15) notnull,

Last_Name varchar(15) notnull,

Address varchar(30));

EID欄位不需要指定值,因SQL Server預設會由1開始逐列自動遞增(2,3,4...)

※另外,也可以替identity欄位指定一個起始值與遞增量,語法如下:

identity改成identity (起始值,遞增量)

 

3. 參考資料

ü   建立與修改資料表

ü   SQL 教學 » Constraint (限制) - SQL Tutorial

ü   T-SQL筆記三_.Net编程 - 好工具站长分享平台

ü   賀瑞斯機器兵- T-SQL Add-Drop Default Value

 

 

arrow
arrow
    創作者介紹
    創作者 Elsa 的頭像
    Elsa

    Elsaの程式學習筆記

    Elsa 發表在 痞客邦 留言(0) 人氣()