表(SQL)
表
CREATE TABLE
建立資料表
code:sql
CREATE TABLE IF NOT EXISTS mytable (
column DataType TableConstraint DEFAULT default_value,
another_column DataType TableConstraint DEFAULT default_value,
…
);
新資料表的結構由Schema定義,其會描述一系列的欄位,包含
欄位名稱
欄位可用的資料型別
(可選)插入值的資料表限制
(可選)預設值
如果已經存在同名資料表,SQL會拋出錯誤,可以使用IF NOT EXISTS子句迴避
資料型別
INTEGER、BOOLEAN
整數型別,某些實作中,布林值會以0或1的整數形式表示
FLOAT、DOUBLE、REAL
浮點數型別,依所需精度選擇
CHARACTER(num_chars)、VARCHAR(num_chars)、TEXT
文字型別,依所需底層效率選擇
CARACTER和VARCHAR都需指定最大字元數
DATE、DATETIME
日期與時間戳記
BLOB
二進位資料,通常需要搭配正確的中繼資料,才能查詢或使用
資料表限制
PRIMARY KEY
此欄位的值必須是唯一,且每個值可用於識別每一筆資料
AUTOINCREMENT
在整數欄位上,每次插入資料列時會自動填入且遞增
UNIQUE
此欄位的值必須是唯一,且不可與資料表的其他資料列的欄位值重複
和PRIMARY KEY的差異是,不一定要用作資料列的主鍵
NOT NULL
插入值不能為NULL
CHECK(expression)
使用更複雜的運算式檢查插入值是否有效
FOREIGN KEY
一致性檢查,確保此欄位的每個值,都對應到另一個資料表中某個欄位的值
範例
code:sql
CREATE TABLE movies (
id INTEGER PRIMARY KEY,
title TEXT,
director TEXT,
year INTEGER,
length_minutes INTEGER
);
ALTER TABLE
修改資料表
和CREATE TABLE類似,需指定欄位的資料型別、可設定限制和預設值
新增欄位
ADD
code:sql
ALTER TABLE mytable
ADD column DataType OptionalTableConstraint
DEFAULT default_value;
某些資料庫(例如MySQL)可使用FIRST或AFTER指定插入位置,但這不是SQL的標準功能
刪除欄位
DROP
code:sql
ALTER TABLE mytable
DROP column_to_be_deleted;
某些資料庫(包含SQLite)不支援此功能,必須建立一個新的資料表,並把資料遷移過去
重新命名資料表
RENAME TO
code:sql
ALTER TABLE mytable
RENAME TO new_table_name;
DROP TABLE
刪除整個資料表
code:sql
DROP TABLE IF EXISTS mytable;
和CREATE TABLE一樣,如果資料表不存在,SQL會拋出錯誤,可以使用IF EXISTS子句迴避