2017年10月11日 星期三

新建資料表時建立CHECK條件約束

新建資料表時建立CHECK條件約束:
1.      使用Enterprise Manager
(1)   於結構定義畫面中完成所有欄位定義後,按工具列中的[資料表和索引屬性]按鈕,再切換至[檢查條件約束]標籤頁面。
(2)   按下[新增]按鈕以建立一個CHECK條件約束,此時於下方便允許開始定義CHECK條件約束。
(3)   承上,例如:希望存入cur_salary欄位中的薪資值要介於15,000200,000則鍵入:cur_salary >= 15000 AND cur_salary <= 200000
又例如:希望cur_salary欄位中的薪資值務必大於hire_salary欄位中的起薪值,則鍵入:cur_salary >= hire_salary
(4)   最後按一下[存檔]按鈕來將資料表存檔。
2.      使用CREATE TABLE命令
可用下列語法:
CREATE TABLE table_name
   (
   column_name fata_type
   [[CONSTAINT column_level_constraint_name]
     CHECK [NOT FOR REPLICATION] (logical_expression)]
   [,…n]
   [[CONSTAINT table_level_constraint_name]
     CHECK [NOT FOR REPLICATION] (logical_expression)]
   [,…n]
   )
可以指定欄位或資料表層次之CHECK條件約束。
範例:
   新建立一個資料表,並定義一個名稱為MemberNoChk的欄位層次之CHECK條件約束,以便限制存入欄位MemberNo的整數值必須介於110,000之間。
   /* 檔案名稱:Demo61.sql */
   CREATE TABLE DemoTable1
   (
   MemberNo smallint NOT NULL
      CONSTRAINT MemberNoChk
      CHECK (MemberNo BETWEEN 1 AND 10000),
   name varchar(20) NOT NULL,
   address varchar(60) NOT NULL
   )


※範例二
1.      存放於Id欄位的身分證字號必須第一碼是英文字母、第二碼必須是數目字12、後八碼則必須介於09的數目字。
2.      存放於JobId欄位的員工編號必須以文字串T1C開頭,後三碼必須介於09的數目字。
3.      存放於sex欄位的性別必須是字母MF
4.      Birthday欄位係存放出生日期,但是員工必須年滿18歲。
5.      存放於Phone欄位的電話號碼必須是下列格式:
(1)   區碼可以是兩碼或三碼且必須以小括弧刮起。
(2)   如果區碼是三碼,電話號碼則必須是六碼,且前三碼與後三碼必須以連字號(-)隔開,例如:(049)912-330
(3)   如果區碼是兩碼,電話號碼可以是七碼或八碼。當電話號碼是七碼時,前三碼與後四碼必須以連字號(-)隔開,例如:(04)452-8789;當電話號碼是八碼時,前四碼與後四碼必須以連字號(-)隔開,例如:(02)2345-6789
6.      存放於BloodType欄位的血型資料必須是文字串ABABORH+RH-其中之一。
7.      存放於Hire_Salary欄位的起薪必須介於15000100000
8.      存放於Cur_Salary欄位的目前薪資必須介於15000200000
9.      對同一位員工而言,目前薪資務必大於或等於起新。
Ans.
欲建立擁有上述CHECK條件約束的資料表,請執行如下所示的CREATE TABLE命令敘述:
/* 檔案名稱:Demo65.sql */
CREATE TABLE DemoTable5
(
Id char(10) NOT NULL
  CONSTRAINT IdChk
  CHECK(Id LIKE ‘[A-Z][1-2][0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]’),
JobId char(6) NOT NULL
  CONSTRAINT JobIdChk
  CHECK(JobId LIKE ‘T1C[0-9] [0-9] [0-9]’),
Name varchar(20) NOT NULL,
Sex char(1) NOT NULL
  CONSTRAINT SexChk
  CHECK(sex IN (‘M’,’F’)),
Birthday datetime NOT NULL
  CONSTRAINT AgeChk
  CHECK(DATEDIFF(year,Birthday,getdate()) >= 18),
Phone char(13) NOT NULL
CONSTRAINT PhoneChk
CHECK (Phone LIKE
   ‘([0-9] [0-9]) [0-9] [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]’
   OR
   Phone LIKE ‘([0-9] [0-9]) [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]’
   OR
   Phone LIKE ‘([0-9] [0-9] [0-9]) [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9]’),
Address Varchar(60) NOT NULL,
BloodType varchar(3) NOT NULL
   CONSTRAINT BloodTypeChk
   CHECK(BloodType IN (‘A’,’B’,’AB’,’O’,’RH+’,’RH-‘)),
Hire_Salary money NOT NULL
   CONSTRAINT Hire_SalaryChk
   CHECK (Hire_Salary >= 15000 AND Hire_Salary <= 100000),
Cur_Salary money NOT NULL
   CONSTRAINT Cur_SalaryChk
   CHECK (Cur_Salary BETWEEN 15000 AND 200000),
CONSTRAINT SalaryChk  ---------à資料表層次的CHECK條件約束
CHECK (Cur_Salary >= Hire_Salary)
)


沒有留言:

用頭腦去思考,不要人云亦云才好, 宗教信徒就是依賴與自私心態(求東求西)的人, 光是這點就很容易暴露弱點了, 難怪seafood吃飽飽,哈哈。 續上, 除了依賴與自私心態(兩者都是人性)之外。 另外也有很大一部份的人,是人云亦云的思考邏輯, 所以宗教才能譁眾取寵。