iT邦幫忙

1

MySQL 學習筆記 (CONSTRAINT 預設值篇)

內文皆使用 MySQL 語法

CONSTRAINT (預設值)

  • 用來限制哪一些資料可以存入表格中
  • 用於 CREATE TABLE 或後續 ALTER TABLE

常見限制

  • AUTO_INCREMENT 自動 +1 (該欄位不需要自行傳入,會自動產生)
  • NOT NULL (不可為空)
  • UNIQUE (獨特、唯一、不可重複)
  • CHECK (可帶入判斷式、MySQL無法使用此)
  • DEFAULT (設定預設值)
  • PRIMARY KEY 主鍵
  • FOREIGN KEY 外來鍵
  CREATE TABLE users (
    -- 主鍵 必帶有 UNIQUE 特性
    id INT AUTO_INCREMENT,
    name VARCHAR(100) UNIQUE,
    phone VARCHAR(10) NOT NULL,
    location VARCHAR(100) DEFAULT 'taiwan',
    -- MySQL 無法使用 CHECK
    age INT(10) CHECK (age>0),
    CONSTRAINT pk_UserID PRIMARY KEY (id,name)
  )

主鍵

  • 主鍵 為各 TABLE 的唯一數值,用以判斷每行資料
  • 主鍵 可為資料中的欄位(name)、與資料無關的欄位(id)
  • 主鍵 亦可包含多個欄位,又稱組合鍵 (Composite Key)
  • Why use 組合鍵? 因為被組合的欄位皆非 Unique,但組合後可為 Unique
  • 主鍵 亦可由外來鍵組成
  CREATE TABLE users (
    -- 主鍵 必帶有 UNIQUE 特性
    id INT AUTO_INCREMENT,
    name VARCHAR(50),
    CONSTRAINT pk_UserID PRIMARY KEY (id,name)
  );

  -- 變更主鍵 (必須確定該欄位為 NOT NULL)
  ALTER TABLE users ADD PRIMARY KEY (id);
  ALTER TABLE users ADD PRIMARY KEY (id, name);

  -- 外來鍵 組成 主鍵
  CREATE TABLE sc(
    sno VARCHAR(10), -- 學生編號 (學生資料表主鍵)
    cno VARCHAR(10), -- 課程編號 (課程資料表主鍵)
    score INT(4), -- 分數
    CONSTRAINT pk_score PRIMARY KEY (sno,cno)
  );

外來鍵

  • 指向另一個表格的主鍵欄位
  • 目的: 確定兩個資料表的關聯性
  CREATE TABLE ORDERS (
    Order_ID INT(100) AUTO_INCREMENT, 
    Order_Date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
    Customer_SID INT(100), 
    AMOUNT INT(100), 
    PRIMARY KEY (Order_ID), 
    FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID)
  );

  -- 新增外來鍵
  ALTER TABLE ORDERS ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

尚未有邦友留言

立即登入留言