☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
sql 初學

CREATE TABLE 與資料型態

CREATE TABLE — 建立你的第一張表

比喻:CREATE TABLE 就像設計 Excel 表頭 📋

在填資料之前,你得先決定有哪些欄位、每欄放什麼類型的資料。 CREATE TABLE 就是在做這件事。


基本語法

CREATE TABLE Students (          -- ← 建立 Students 表
    Id SERIAL PRIMARY KEY,       -- ← 自動遞增的主鍵
    Name VARCHAR(50) NOT NULL,   -- ← 最多 50 字的字串,不可為空
    Age INT,                     -- ← 整數
    Email VARCHAR(100) UNIQUE,   -- ← 最多 100 字,不可重複
    Score DECIMAL(5,2),          -- ← 總 5 位數,小數 2 位
    IsActive BOOLEAN DEFAULT true, -- ← 布林值,預設 true
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP  -- ← 自動記錄建立時間
);

逐行解析:

Id SERIAL PRIMARY KEY        -- SERIAL = 自動遞增整數(1, 2, 3...)
                             -- PRIMARY KEY = 主鍵,每筆唯一
Name VARCHAR(50) NOT NULL    -- VARCHAR(50) = 可變長度字串,最多 50 字
                             -- NOT NULL = 這欄一定要有值,不能留空
Email VARCHAR(100) UNIQUE    -- UNIQUE = 不能重複(兩人不能同 email)
Score DECIMAL(5,2)           -- DECIMAL(5,2) = 最多 5 位數,其中 2 位小數
                             -- 例如 999.99(可以),10000.0(不行,超過 5 位)
IsActive BOOLEAN DEFAULT true -- DEFAULT = 沒填的話自動用這個值
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 自動填入當前時間

常用資料型態

數字類型

-- 整數
SMALLINT          -- -32,768 ~ 32,767(2 bytes)
INT / INTEGER     -- -21 億 ~ 21 億(4 bytes)← 最常用
BIGINT            -- 超大整數(8 bytes)
SERIAL            -- 自動遞增 INT(PostgreSQL)
BIGSERIAL         -- 自動遞增 BIGINT

-- 小數
DECIMAL(10,2)     -- 精確小數(金額用這個!)
NUMERIC(10,2)     -- 同 DECIMAL
REAL              -- 浮點數(有誤差)
DOUBLE PRECISION  -- 雙精度浮點數

字串類型

CHAR(10)          -- 固定長度 10 字元(不夠補空白)
VARCHAR(100)      -- 可變長度,最多 100 字元 ← 最常用
TEXT              -- 無長度限制的字串(適合存文章)

日期時間

DATE              -- 日期(2024-01-15)
TIME              -- 時間(14:30:00)
TIMESTAMP         -- 日期 + 時間(2024-01-15 14:30:00)
INTERVAL          -- 時間間隔(2 hours, 3 days)

其他

BOOLEAN           -- true / false
UUID              -- 全球唯一識別碼
JSON / JSONB      -- JSON 格式資料(PostgreSQL)
BYTEA             -- 二進位資料(檔案、圖片)

約束(Constraints)

CREATE TABLE Orders (
    Id SERIAL PRIMARY KEY,             -- 主鍵約束
    OrderNo VARCHAR(20) NOT NULL UNIQUE, -- 非空 + 唯一
    CustomerId INT NOT NULL,           -- 外鍵欄位
    Amount DECIMAL(10,2) CHECK (Amount > 0),  -- 檢查約束
    Status VARCHAR(20) DEFAULT 'pending',     -- 預設值
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

    -- 外鍵約束(獨立宣告)
    CONSTRAINT fk_customer
        FOREIGN KEY (CustomerId)
        REFERENCES Customers(Id)
        ON DELETE CASCADE              -- 客戶被刪時,訂單也刪
);

約束一覽

約束 用途 範例
PRIMARY KEY 主鍵,唯一且非空 Id SERIAL PRIMARY KEY
NOT NULL 不可為空 Name VARCHAR(50) NOT NULL
UNIQUE 不可重複 Email VARCHAR(100) UNIQUE
DEFAULT 預設值 Status DEFAULT 'active'
CHECK 條件檢查 CHECK (Age >= 0)
FOREIGN KEY 外鍵,參照別的表 REFERENCES Customers(Id)

ALTER TABLE — 修改表結構

-- 新增欄位
ALTER TABLE Students
ADD COLUMN Phone VARCHAR(20);         -- ← 加一欄電話

-- 刪除欄位
ALTER TABLE Students
DROP COLUMN Phone;                    -- ← 移除電話欄位

-- 修改欄位型態
ALTER TABLE Students
ALTER COLUMN Name TYPE VARCHAR(100);  -- ← 把名字長度改成 100

-- 新增約束
ALTER TABLE Students
ADD CONSTRAINT uq_email UNIQUE (Email);

-- 重新命名欄位
ALTER TABLE Students
RENAME COLUMN Name TO FullName;

DROP TABLE — 刪除表

DROP TABLE Students;                  -- ⚠️ 整張表消失!

DROP TABLE IF EXISTS Students;        -- 如果存在才刪(避免錯誤)

⚠️ DROP TABLE 是不可逆的!請搭配備份使用。

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊