CONSTRAINT(約束)

定義:

本質上是一個SQL關鍵字,但不適用於HKDSE。
此外,它還代表着對表格/欄位的約束。

(PS:雖然HKDSE ICT SQL指令參考表中並不存在以下一些關鍵字,但最好記住這些關鍵字。)


指令語例:


1.主鍵(PRIMARY KEY)

CREATE TABLE table_name(field1_name data_type PRIMARY KEY);
  • 新設名為field1_name的欄位作為新資料表table_name的主鍵(PRIMARY KEY)
ALTER TABLE table_name ADD PRIMARY KEY(field1_name);
  • 更設名為field1_name的現有欄位作為現有資料表table_name的主鍵(PRIMARY KEY)
ALTER TABLE table_name DROP PRIMARY KEY;
  • 移除現有資料表table_name的主鍵(PRIMARY KEY)約束

2.外鍵(FOREIGN KEY)

CREATE TABLE table_name(
field1_name data_type[constraint(s)],
...
FOREIGN KEY(field1_name)
REFERENCES reference_table_name(parent_field_name));
  • 新設名為field1_name的欄位作為新資料表table_name的外鍵(FOREIGN KEY),參考父級資料表reference_table_name的現有欄位parent_field_name
ALTER TABLE table_name ADD FOREIGN KEY(field1_name) REFERENCES reference_table_name(parent_field_name);
  • 更設名為field1_name的現有欄位作為現有資料表table_name的外鍵(FOREIGN KEY),參考父級資料表reference_table_name的現有欄位parent_field_name
ALTER TABLE table_name DROP FOREIGN KEY foreign_key_name;
  • 移除現有資料表table_name名為foreign_key_name的外鍵(FOREIGN KEY)約束
  • 外鍵(FOREIGN KEY)約束的名稱可透過SHOW CREATE TABLE - SQL語句尋得

3.NOT NULL(非空值)

CREATE TABLE table_name(field1_name data_type NOT NULL);
  • 新設在新資料表table_name的欄位field1_name擁有非空值(NOT NULL)約束,插入新記錄(record)時,該欄位必須填上非空值
ALTER TABLE table_name MODIFY field1_name data_type NOT NULL;
  • 更設在現有資料表table_name的欄位field1_name擁有指定的(新)資料類型data_type和擁有非空值(NOT NULL)約束,新記錄(record)和現有記錄的該欄位必須填上非空值
ALTER TABLE table_name MODIFY field1_name data_type;
  • 更設在現有資料表table_name的欄位field1_name擁有指定的(新)資料類型data_type和移除非空值(NOT NULL)約束

4.UNIQUE(唯一值)

ALTER TABLE table_name ADD UNIQUE(field1_name);
  • 新設在新資料表table_name的欄位field1_name擁有唯一值(UNIQUE)約束,插入新記錄(record)時,該欄位必須填上唯一值
ALTER TABLE table_name ADD UNIQUE(field1_name);
  • 更設在現有資料表table_name的欄位field1_name擁有唯一值(UNIQUE)約束,新記錄(record)和現有記錄的該欄位必須填上唯一值
ALTER TABLE table_name DROP INDEX field1_name;
  • 移除現有資料表table_name的欄位field1_name的唯一值(UNIQUE)約束

5.DEFAULT(預設值)

CREATE TABLE table_name(field1_name data_type DEFAULT default_value);
  • 新設在新資料表table_name的欄位field1_name擁有預設值(DEFAULT)約束,插入新記錄(record)時,該欄位預設填上default_value
ALTER TABLE table_name ALTER field1_name SET DEFAULT default_value;
  • 更設在現有資料表table_name的欄位field1_name擁有預設值(DEFAULT)約束,插入新記錄(record)時,該欄位預設填上default_value,現有記錄的該欄位若為空值(NULL),預設填上default_value
ALTER TABLE table_name ALTER field1_name DROP DEFAULT;
  • 移除現有資料表table_name的欄位field1_name的預設值(DEFAULT)約束

6.CHECK(條件檢查)

CREATE TABLE table_name(
field1_name data_type [constraint(s)],
field2_name data_type [constraint(s)],
field3_name data_type [constraint(s)],
...
CHECK(criteria)
);
  • 新資料表table_name設有條件檢查(CHECK)約束,新記錄(record)必須符合所有條件句(criteria)
  • 條件句(criteria)示例:
    CHECK(CLASS_NO > 0)
    CHECK(SID > 0 AND CLASS = '1B')
ALTER TABLE table_name ADD CHECK(criteria);
  • 現有資料表table_name更設有條件檢查(CHECK)約束,每個記錄(record)必須符合所有條件句(criteria)
ALTER TABLE table_name DROP valid_check_name;
  • 移除現有資料表table_name名為valid_check_name的條件檢查(CHECK)約束
  • 條件檢查(CHECK)約束的名稱可透過SHOW CREATE TABLE - SQL語句尋得

其他參考:

IBM:Link
Oracle:Link
「難 but Fun。」某位中六學生說道

留言