SQLite語句(一):表的操作和約束

zcbin發表於2018-03-03

一、表的相關操作

建立表
CREATE TABLE <表名>(<列名> <資料型別>[列級完整性約束條件]
                  [,<列名> <資料型別>[列級完整性約束條件]]…);
複製程式碼

示例:

-- 建立學生表
CREATE TABLE Student
(
  Id INT NOT NULL UNIQUE PRIMARY KEY,
  Name VARCHAR(20) NOT NULL,
  Age INT NULL,
  Gender VARCHAR(4) NULL
);
複製程式碼
刪除表
DROP TABLE <表名>;
複製程式碼

示例:

-- 刪除學生表
DROP TABLE Student;
複製程式碼

刪除表時,為了避免錯誤,也可以加上IF EXISTS語句,如:

/**
*  DROP TABLE IF  EXISTS 表名
*/
DROP TABLE IF  EXISTS User
複製程式碼
修改表
-- 新增列
ALTER TABLE <表名> [ADD <新列名> <資料型別>[列級完整性約束條件]]
-- 刪除列
ALTER TABLE <表名> [DROP COLUMN <列名>]
-- 修改列
ALTER TABLE <表名> [MODIFY COLUMN <列名> <資料型別> [列級完整性約束條件]]
複製程式碼

示例:

-- 新增學生表`Phone`列
ALTER TABLE Student ADD Phone VARCHAR(15) NULL;
-- 刪除學生表`Phone`列
ALTER TABLE Student DROP COLUMN Phone;
-- 修改學生表`Phone`列
ALTER TABLE Student MODIFY Phone VARCHAR(13) NULL;
複製程式碼

二、約束

SQLite中的約束包括以下:

  NOT NULL :確保某列不能有 NULL 值。
  UNIQUE : 確保某列中的所有值是不同的。
  PRIMARY KEY :唯一標識資料庫表中的各行/記錄。
  FOREIGN KEY : 外來鍵
  CHECK :CHECK 約束確保某列中的所有值滿足一定條件。
  DEFAULT : 當某列沒有指定值時,為該列提供預設值。
複製程式碼
NOT NULL 約束

預設情況下,列可以儲存 NULL 值。如果您不想某列有 NULL 值,那麼需要在該列上定義此約束,指定在該列上不允許 NULL 值。 NULL 與沒有資料是不一樣的,它代表著未知的資料。

例項: 例如,下面的 SQLite 語句建立一個新的表 COMPANY,並增加了五列,其中 ID、NAME 和 AGE 三列指定不接受 NULL 值:

CREATE TABLE COMPANY(
ID INT PRIMARY KEY    NOT NULL,
NAME          TEXT    NOT NULL,
AGE            INT    NOT NULL,
ADDRESS        CHAR(50),
SALARY        REAL
);
複製程式碼
UNIQUE 約束

UNIQUE 約束防止在一個特定的列存在兩個記錄具有相同的值。在 COMPANY 表中,例如,您可能要防止兩個或兩個以上的人具有相同的年齡。

例項: 例如,下面的 SQLite 語句建立一個新的表 COMPANY,並增加了五列。在這裡,AGE 列設定為 UNIQUE,所以不能有兩個相同年齡的記錄:

CREATE TABLE COMPANY(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL UNIQUE,
  ADDRESS        CHAR(50),
  SALARY        REAL    DEFAULT 50000.00
);
複製程式碼
PRIMARY KEY 約束

PRIMARY KEY 約束唯一標識資料庫表中的每個記錄。在一個表中可以有多個 UNIQUE 列,但只能有一個主鍵。在設計資料庫表時,主鍵是很重要的。主鍵是唯一的 ID。 我們使用主鍵來引用表中的行。可通過把主鍵設定為其他表的外來鍵,來建立表之間的關係。由於"長期存在編碼監督",在 SQLite 中,主鍵可以是 NULL,這是與其他資料庫不同的地方。 主鍵是表中的一個欄位,唯一標識資料庫表中的各行/記錄。主鍵必須包含唯一值。主鍵列不能有 NULL 值。 一個表只能有一個主鍵,它可以由一個或多個欄位組成。當多個欄位作為主鍵,它們被稱為複合鍵。 如果一個表在任何欄位上定義了一個主鍵,那麼在這些欄位上不能有兩個記錄具有相同的值。

例項:

CREATE TABLE COMPANY(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL,
  ADDRESS        CHAR(50),
  SALARY        REAL
);
複製程式碼
CHECK 約束

CHECK 約束啟用輸入一條記錄要檢查值的條件。如果條件值為 false,則記錄違反了約束,且不能輸入到表。

例項: 例如,下面的 SQLite 建立一個新的表 COMPANY,並增加了五列。在這裡,我們為 SALARY 列新增 CHECK,所以工資不能為零:

CREATE TABLE COMPANY3(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL,
  ADDRESS        CHAR(50),
  SALARY        REAL    CHECK(SALARY > 0)
);
複製程式碼
DEFAULT 約束

DEFAULT 約束在 INSERT INTO 語句沒有提供一個特定的值時,為列提供一個預設值。

例項: 例如,下面的 SQLite 語句建立一個新的表 COMPANY,並增加了五列。在這裡,SALARY 列預設設定為 5000.00。所以當 INSERT INTO 語句沒有為該列提供值時,該列將被設定為 5000.00。

CREATE TABLE COMPANY(
  ID INT PRIMARY KEY    NOT NULL,
  NAME          TEXT    NOT NULL,
  AGE            INT    NOT NULL,
  ADDRESS        CHAR(50),
  SALARY        REAL    DEFAULT 50000.00
);
複製程式碼

相關文章