1. 程式人生 > SQL入門教學 >03 SQL Create 1

03 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 字元型

字元型別則用來表示我們生活中常見的文字和字元,根據字串的長度,我們可將其分為短文字長文字兩類。

常見的短文字型別有charvarchar兩種,其中char不可變長,而varchar可變長。長文字型別有textblob等,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表示欄位名,如usernamedatatype表示資料型別,如int(10),考慮到會有多個欄位和資料型別,因此新增數字字尾 1,2。

提示: 一張表可以有多個欄位,但每個欄位只能有一個數據型別。

5.1 例2 新建 imooc_user 表

請書寫 SQL 語句,新建imooc_user資料表,表分別有usernameagescore這三個欄位。

分析

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資料表,表分別有idtitlecontentrankprice五個欄位。

分析:

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 的基本功,請一定多多練習。