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