SQL CREATE TABLE 語句

在本教程中,你將學習如何使用 SQL 在資料庫中建立表。

建立表

在上一章中,我們學習瞭如何在資料庫伺服器上建立資料庫。現在是時候在我們的資料庫中建立一些實際儲存資料的表。資料庫表只是將資訊組織成行和列。

SQL CREATE TABLE 語句用於建立表。

語法

建立表的基本語法可以通過以下方式給出:

CREATE TABLE table_name ( column1_name data_type constraints, column2_name data_type constraints, ....);

為了便於理解這種語法,我們在 demo 資料庫中建立一個表。在 MySQL 命令列工具上鍵入以下語句,然後按 Enter 鍵:

-- Syntax for MySQL Database 
CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);
 
-- Syntax for SQL Server Database 
CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

上面的語句建立了一個名為 persons 的表,其中包含五列 idnamebirth_datephone。請注意,每個列名後跟一個資料型別宣告; 此宣告指定列將儲存的資料型別,比如是整數,字串,日期等。

某些資料型別可以使用 length 引數宣告,該引數指示可以在列中儲存的字元數。例如, VARCHAR(50) 最多可以容納 50 個字元。

注意: 列的資料型別可能因資料庫系統而異。例如,MySQL 和 SQL Server 支援 INT 整數值的資料型別,而 Oracle 資料庫支援 NUMBER 資料型別。

下表總結了 MySQL 支援的最常用資料型別。

資料型別 描述
INT 儲存-2147483648 到 2147483647 範圍內的數值
DECIMAL 以精確的精度儲存十進位制值。
CHAR 儲存最大長度為 255 個字元的固定長度字串。
VARCHAR 儲存可變長度字串,最大大小為 65,535 個字元。
TEXT 儲存最大為 65,535 個字元的字串。
DATE 以 YYYY-MM-DD 格式儲存日期值。
DATETIME 以 YYYY-MM-DD HH:MM:SS 格式儲存組合日期/時間值。
TIMESTAMP 儲存時間戳值。TIMESTAMP 值儲存為自 Unix 紀元(‘1970-01-01 00:00:01’UTC)以來的秒數。

在前面的語句中為表列設定了一些額外的約束(也稱為修飾符)。約束定義有關列中允許的值的規則。

  • NOT NULL 約束確保該欄位不能接受一個 NULL 值。
  • PRIMARY KEY 約束標誌著相應的欄位作為表的主鍵。
  • AUTO_INCREMENT 屬性是標準 SQL 的 MySQL 擴充套件,它通過將前一個值遞增 1 來告訴 MySQL 自動為該欄位分配值(如果未指定)。僅適用於數字欄位。
  • UNIQUE 約束確保每一行的列必須有一個獨特的值。

我們將在下一章中瞭解有關 SQL 約束的更多資訊。

注意: Microsoft SQL Server 使用該 IDENTITY 屬性執行自動增量功能。預設值是 IDENTITY(1,1) 表示種子或起始值為 1,增量值也為 1。

提示: 你可以執行 DESC table_name; 以檢視 MySQL 和 Oracle 資料庫中任何表的列資訊或結構,而在 SQL Server 中執行 EXEC sp_columns table_name ;(將 table_name 替換為實際的表名)。

如果不存在則建立表

如果你嘗試建立一個已存在於資料庫中的表,你將收到一條錯誤訊息,為避免在 MySQL 中出現這種情況,你可以使用以下可選子句 IF NOT EXISTS

CREATE TABLE IF NOT EXISTS persons (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

提示: 如果要檢視當前所選資料庫中的表列表,可以在 MySQL 命令列上執行 SHOW TABLES; 語句。