SQL Create 1
1. 定義
維基百科:SQL
CREATE
指令負責數據庫對象的創建,數據庫、數據表、數據庫索引、函數等都可以使用CREATE
來創建。
慕課解釋:
CREATE
指令功能十分強大,是 SQL 中最為關鍵的指令之一,通過它你可以輕松的在數據庫中創建你所需要的對象,當然這也使 CREATE 的語法有些復雜,掌握 CREATE 是學好 SQL 的關鍵一步。
2. 前言
本小節,我們將一起學習 SQL Create
。
Create 是一個較為復雜的指令,我們不會在一個小節中將它全盤托出,而是通過多個知識點將其串聯起來。在這個小節里面,我們會介紹新建數據庫
和新建數據表
這兩個最常用的功能點,其中新建數據表
的語法是比較復雜的,它不僅涉及字段數據類型
,還涉及到了SQL約束
方面的內容。
考慮到篇幅問題,在本小節中我們會著重介紹字段數據類型
的知識,而將SQL約束
將放在下一節再詳細介紹。
3. 新建數據庫
使用CREATE DATABASE
可以在 RDBMS 中新建數據庫。
語法如下:
CREATE DATABASE [database_name];
其中[]
中database_name
代表數據庫名稱。
3.1 例1 新建 imooc 數據庫
請書寫 SQL 語句,新建一個名為imooc
的數據庫。
分析:
按照上面的語法格式,我們把占位符替換為imooc
即可。
語句:
CREATE DATABASE imooc;
4. 數據類型
與創建數據庫比起來,創建數據表要復雜的多,我們需要為表中的每個字段明確地指明數據類型,數據表才可被創建,因此我們先來學習 SQL 中的數據類型。
數據類型
規定了某字段只能容納和表示某種特定的數據類型。
常見的數據類型有三種,它們分別是:數值型
,字符型
和日期型
。
4.1 數值型
數值類型就是我們在數學中常見的數字,它也被分為整數類型
和小數類型
兩大類。整數類型默認有符號,即可以為負數,如 -1 ,如需無符號,則需要unsigned
關鍵字來約束,約束后不可表示負數。
整數類型有數據長度的限制,如果在數據插入時超出其整型范圍,數據庫會報異常并插入失敗。如在64機上,int 類型大小為32位,即4字節,如果插入的數字大小超過了2^32,插入便會失敗,此時你需要使用容量更大整數類型,如 bigint,它的大小是 64 位。
整數類型可以接受一個參數,我們通常把這個參數稱作長度,不過它并不是整數真正的長度,而是它的最大顯示寬度。
小數類型可以理解為兩部分
:整數部分 + 小數部分。因此小數類型在指定的時候可以傳入兩個參數,第一個參數表示整體的長度,第二個參數則代表小數部分的長度。
數值型常見類型如下表所示:
數據類型 | 最大容量(字節) | 描述 |
---|---|---|
tinyint(size) | 1 | 極小整型 |
smallint(size) | 2 | 小整型 |
mediumint(size) | 3 | 中整型 |
int/integer(size) | 4 | 整型,最為廣泛 |
bigint(size) | 8 | 大整型 |
float(size,d) | 4 | 單精度小數 |
double(size,d) | 8 | 雙精度小數 |
decimal(size,d) | 8 | 貨幣類型 |
numberic(size,d) | 8 | 同decimal |
說明: 表中數據類型一欄中的 size 表示 整體的長度,d 表示小數部分的長度。
4.2 字符型
字符類型則用來表示我們生活中常見的文本和字符,根據字符串的長度,我們可將其分為短文本
和長文本
兩類。
常見的短文本類型有char
和varchar
兩種,其中char
不可變長,而varchar
可變長。長文本類型有text
和blob
等,text
用來保存長文本,而blob
用來保存二進制流數據。
字符型常見類型如下表所示:
數據類型 | 可否變長 | 描述 |
---|---|---|
char(size) | 不可 | 固定長度短字符串 |
varchar(size) | 可 | 不固定長度短字符串 |
text | 可 | 長字符串,保存文章內容 |
blob | 可 | 二進制流,保存圖片,媒體信息 |
4.3 日期型
日期類型是三大類型中最復雜的一種類型,涉及的內容也比較多,我們將用SQL 日期類型一整節的篇幅來詳細介紹。
5. 新建數據表
使用CREATE TABLE
指令可以在數據庫中新建數據表。
它的基礎語法如下:
CREATE TABLE [table_name]
(
[col1] [datatype1],
[col2] [datatype2],
[col3] [datatype3],
....
);
CREATE TABLE 指令是 SQL 中一個頗為復雜的指令,上面只給出了基礎語法,在后面章節我們會逐漸介紹更為復雜的語法。上面的語法中col
表示字段名
,如username
。datatype
表示數據類型,如int(10)
,考慮到會有多個字段和數據類型,因此添加數字后綴 1,2。
提示: 一張表可以有多個字段,但每個字段只能有一個數據類型。
5.1 例2 新建 imooc_user 表
請書寫 SQL 語句,新建imooc_user
數據表,表分別有username
,age
,score
這三個字段。
分析:
imooc_user 有三個字段,其中 username 代表用戶名,一般情況下,用戶名都使用字符串表示,且每個人的用戶名長短不一,為可變短文本,所以使用數據類型 varchar。且名字都不會太長(俄羅斯人除外?),長度 20 即可;age 代表年齡,是典型的整數類型,即 int;score 代表分數,是典型的浮點數類型,即 float。
語句:
整理可得語句如下:
CREATE TABLE imooc_user
(
username varchar(20),
age int,
score float
);
執行成功后,可得 imooc_user 表的信息:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | YES | | <null> | |
| age | int(11) | YES | | <null> | |
| score | float | YES | | <null> | |
+----------+-------------+------+-----+---------+-------+
5.2 例3 新建 article 表
請書寫 SQL 語句,新建article
數據表,表分別有id
,title
,content
,rank
,price
五個字段。
分析:
article 表共 5 個字段,其中 id 字段作為唯一標識,采用整型來表示;title 是文章標題,為可變的短文本,即 varchar 類型,一般標題規定在 50 字符以內;content 表示文章內容,是可變的長文本,用 text 類型來容納; rank 表示文章排名,使用 int 類型;price 代表文章價格,價格精確到分,使用 decimal 表示,小數位數為 2 位。
語句:
整理可得如下語句:
CREATE TABLE article
(
id int,
title varchar(50),
content text,
`rank` int,
price decimal(10,2)
);
執行語句,創建成功后,article 表的信息如下:
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| id | int(11) | YES | | <null> | |
| title | varchar(50) | YES | | <null> | |
| content | text | YES | | <null> | |
| rank | int(11) | YES | | <null> | |
| price | decimal(10,2) | YES | | <null> | |
+---------+---------------+------+-----+---------+-------+
注意: 在一些數據庫中,如 MySQL 把 rank 當作了關鍵字,因此需要加上轉義符號 `` 才能新建成功。
6. 小結
- SQL 數據類型其實是頗為繁雜,一些 RDBMS 還有特定的數據類型,我們推薦你熟記上面所提到的三大常用數據類型,而其它的類型在需要的時候查閱即可。
- 創建數據表是學習 SQL 的基本功,請一定多多練習。