在本教程中,您將學(xué)習(xí)如何使用SQL在數(shù)據(jù)庫內(nèi)部創(chuàng)建表。
在上一章中,我們學(xué)習(xí)了如何在數(shù)據(jù)庫服務(wù)器上創(chuàng)建數(shù)據(jù)庫?,F(xiàn)在是時候在數(shù)據(jù)庫中創(chuàng)建一些表,這些表實際上將保存數(shù)據(jù)。數(shù)據(jù)庫表只是將信息組織成行和列。
SQL CREATE TABLE語句用于創(chuàng)建表。
創(chuàng)建表的基本語法可以通過以下方式給出:
CREATE TABLE table_name (column1_name data_type constraints,column2_name data_type constraints,.... );
為了輕松理解此語法,讓我們在演示數(shù)據(jù)庫中創(chuàng)建一個表。在MySQL命令行工具上鍵入以下語句,然后按Enter:
-- MySQL數(shù)據(jù)庫的語法 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 ); -- SQL Server數(shù)據(jù)庫的語法 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 );
上面的語句創(chuàng)建一個名為person的表,該表具有id,name,birth_date和phone四列。注意,每個列名后都有一個數(shù)據(jù)類型聲明;此聲明指定列將存儲什么類型的數(shù)據(jù),整數(shù),字符串,日期等。
某些數(shù)據(jù)類型可以使用length參數(shù)聲明,該參數(shù)指示可以在列中存儲多少個字符。例如,VARCHAR(50)最多可容納50個字符。
注意:列的數(shù)據(jù)類型可能會因數(shù)據(jù)庫系統(tǒng)而異。例如,MySQL和SQL Server支持INT整數(shù)值的數(shù)據(jù)類型,而Oracle數(shù)據(jù)庫支持NUMBER數(shù)據(jù)類型。
下表總結(jié)了MySQL支持的最常用的數(shù)據(jù)類型。
數(shù)據(jù)類型 | 描述 |
---|---|
INT | 存儲介于-2147483648至2147483647之間的數(shù)值 |
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)以來的秒數(shù)。 |
請查看參考部分SQL DB數(shù)據(jù)類型,以獲取有關(guān)流行的RDBMS(如MySQL,SQL Server等)中可用的所有數(shù)據(jù)類型的詳細信息。
在前面的語句中為表列設(shè)置了一些其他約束(也稱為修飾符)。約束定義關(guān)于列中允許的值的規(guī)則。
NOT NULL約束確保該字段不能接受一個NULL值。
PRIMARY KEY約束標(biāo)記對應(yīng)的字段作為表的主鍵。
AUTO_INCREMENT屬性是標(biāo)準(zhǔn)SQL的MySQL擴展,它告訴MySQL如果未指定該值,則通過將前一個值增加1來自動為該字段分配一個值。僅適用于數(shù)字字段。
UNIQUE約束確保一列的每一行必須具有唯一值。
在下一章中,我們將學(xué)習(xí)有關(guān)SQL約束的更多信息。
注意: Microsoft SQL Server使用該IDENTITY屬性來執(zhí)行自動增量功能。默認值為IDENTITY(1,1),即種子或起始值為1,增量值為1。
提示:您可以執(zhí)行命令以查看MySQL和Oracle數(shù)據(jù)庫中任何表的列信息或任何表的結(jié)構(gòu),而在SQL Server中(將table_name替換為實際的表名)。DESC table_name;EXEC sp_columns table_name;
如果您嘗試創(chuàng)建數(shù)據(jù)庫中已經(jīng)存在的表,則會收到錯誤消息。為了避免這種情況,可以在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 );
提示:如果要查看當(dāng)前選定數(shù)據(jù)庫內(nèi)的表的列表,可以SHOW TABLES;在MySQL命令行上執(zhí)行語句。