關(guān)于SQL建表語句使用詳解
SQL 建表語句詳解
在 SQL 中,創(chuàng)建表(Table)是數(shù)據(jù)庫設(shè)計的基礎(chǔ)。表是存儲數(shù)據(jù)的基本單位,每個表由行和列組成。
創(chuàng)建表的過程涉及到定義表的結(jié)構(gòu),包括列名、數(shù)據(jù)類型、約束等。
本文將詳細(xì)介紹 SQL 中的建表語句,并通過示例幫助讀者更好地理解。
1. 基本語法
創(chuàng)建表的基本語法如下:
CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, column3 datatype constraint, ... );
table_name
:表的名稱。column1, column2, column3
:列的名稱。datatype
:列的數(shù)據(jù)類型。constraint
:列的約束條件。
2. 數(shù)據(jù)類型
SQL 支持多種數(shù)據(jù)類型,常見的有:
- 整數(shù)類型:
INT
,BIGINT
,SMALLINT
,TINYINT
- 浮點數(shù)類型:
FLOAT
,DOUBLE
,DECIMAL(p, s)
- 字符串類型:
CHAR(n)
,VARCHAR(n)
,TEXT
- 日期和時間類型:
DATE
,TIME
,DATETIME
,TIMESTAMP
- 布爾類型:
BOOLEAN
3. 約束
約束用于保證數(shù)據(jù)的完整性和一致性,常見的約束有:
- 主鍵約束:
PRIMARY KEY
,唯一標(biāo)識表中的每一行。 - 唯一約束:
UNIQUE
,確保列中的所有值都是唯一的。 - 非空約束:
NOT NULL
,確保列中的值不能為空。 - 默認(rèn)值約束:
DEFAULT
,為列提供默認(rèn)值。 - 外鍵約束:
FOREIGN KEY
,確保一個表中的數(shù)據(jù)與另一個表中的數(shù)據(jù)一致。 - 檢查約束:
CHECK
,確保列中的值滿足特定條件。
4. 示例
下面通過一個具體的示例來演示如何創(chuàng)建一個表。
假設(shè)我們要創(chuàng)建一個名為 students
的表,用于存儲學(xué)生的信息,包括學(xué)號、姓名、性別、出生日期和班級。
CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender CHAR(1) CHECK (gender IN ('M', 'F')), birth_date DATE, class_id INT, FOREIGN KEY (class_id) REFERENCES classes(class_id) );
在這個示例中:
student_id
是主鍵,唯一標(biāo)識每個學(xué)生。name
是學(xué)生的姓名,不能為空。gender
是學(xué)生的性別,只能是 ‘M’ 或 ‘F’。birth_date
是學(xué)生的出生日期。class_id
是學(xué)生所在的班級,是一個外鍵,引用classes
表中的class_id
。
5. 創(chuàng)建帶有默認(rèn)值的表
有時候我們需要為某些列設(shè)置默認(rèn)值,例如學(xué)生的入學(xué)日期。
CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender CHAR(1) CHECK (gender IN ('M', 'F')), birth_date DATE, class_id INT, enrollment_date DATE DEFAULT CURRENT_DATE, FOREIGN KEY (class_id) REFERENCES classes(class_id) );
在這個示例中,enrollment_date
列的默認(rèn)值是當(dāng)前日期。
6. 創(chuàng)建帶有復(fù)合主鍵的表
有時候我們需要使用多個列作為主鍵,例如訂單表中的訂單號和產(chǎn)品號。
CREATE TABLE order_details ( order_id INT, product_id INT, quantity INT, PRIMARY KEY (order_id, product_id), FOREIGN KEY (order_id) REFERENCES orders(order_id), FOREIGN KEY (product_id) REFERENCES products(product_id) );
在這個示例中,order_id
和 product_id
共同組成主鍵。
7. 創(chuàng)建帶有檢查約束的表
檢查約束用于確保列中的值滿足特定條件,例如學(xué)生的年齡必須在 18 到 30 歲之間。
CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender CHAR(1) CHECK (gender IN ('M', 'F')), birth_date DATE, class_id INT, enrollment_date DATE DEFAULT CURRENT_DATE, age INT CHECK (age >= 18 AND age <= 30), FOREIGN KEY (class_id) REFERENCES classes(class_id) );
在這個示例中,age
列的值必須在 18 到 30 歲之間。
8. 創(chuàng)建帶有唯一約束的表
唯一約束用于確保列中的所有值都是唯一的,例如學(xué)生的郵箱地址。
CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender CHAR(1) CHECK (gender IN ('M', 'F')), birth_date DATE, class_id INT, enrollment_date DATE DEFAULT CURRENT_DATE, email VARCHAR(100) UNIQUE, FOREIGN KEY (class_id) REFERENCES classes(class_id) );
在這個示例中,email
列的值必須是唯一的。
9. 創(chuàng)建帶有自增列的表
自增列用于自動生成唯一的標(biāo)識符,例如學(xué)生的學(xué)號。
CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, gender CHAR(1) CHECK (gender IN ('M', 'F')), birth_date DATE, class_id INT, enrollment_date DATE DEFAULT CURRENT_DATE, FOREIGN KEY (class_id) REFERENCES classes(class_id) );
在這個示例中,student_id
列是自增列,每次插入新記錄時會自動生成一個唯一的學(xué)號。
10. 創(chuàng)建帶有注釋的表
注釋用于為表和列提供說明,便于理解和維護(hù)。
CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '學(xué)生的唯一標(biāo)識', name VARCHAR(50) NOT NULL COMMENT '學(xué)生的姓名', gender CHAR(1) CHECK (gender IN ('M', 'F')) COMMENT '學(xué)生的性別', birth_date DATE COMMENT '學(xué)生的出生日期', class_id INT COMMENT '學(xué)生所在的班級', enrollment_date DATE DEFAULT CURRENT_DATE COMMENT '學(xué)生的入學(xué)日期', FOREIGN KEY (class_id) REFERENCES classes(class_id) ) COMMENT='學(xué)生信息表';
在這個示例中,為表和列添加了注釋,便于理解其含義。
總結(jié)
通過本文的講解,我們詳細(xì)介紹了 SQL 中的建表語句,包括基本語法、數(shù)據(jù)類型、約束、示例等內(nèi)容。
希望讀者能夠通過這些內(nèi)容更好地理解和掌握 SQL 建表語句的使用方法。
在實際應(yīng)用中,根據(jù)具體需求選擇合適的數(shù)據(jù)類型和約束,可以有效地保證數(shù)據(jù)的完整性和一致性。
相關(guān)文章
MySQL null與not null和null與空值''''''''的區(qū)別詳解
這篇文章主要介紹了MySQL null與not null和null與空值''的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11解決MySQL5.1安裝時出現(xiàn)Cannot create windows service for mysql.error
這篇文章主要介紹了解決MySQL5.1安裝時出現(xiàn)Cannot create windows service for mysql.error:0問題的方法2016-06-06MySQL查看與修改當(dāng)前數(shù)據(jù)庫編碼的方法
這篇文章主要介紹了MySQL查看與修改當(dāng)前數(shù)據(jù)庫編碼的方法,需要的朋友可以參考下2016-04-04MYSQL使用.frm恢復(fù)數(shù)據(jù)表結(jié)構(gòu)的實現(xiàn)方法
在這里我們探討使用.frm文件恢復(fù)數(shù)據(jù)表機(jī)構(gòu)(當(dāng)然如果你以前備份過數(shù)據(jù)表,你可以使用調(diào)用備份的數(shù)據(jù)表)2010-02-02windows系統(tǒng)mysql5.7.18安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了windows系統(tǒng)下mysql5.7.18安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03