快轉到主要內容

《SQL Basics-01》CREATE、INSERT

·1421 字
Computer-Science SQL Database
目錄
SQL-Basic - 本文屬於一個選集。
§ : 本文

一些基礎常見的 SQL 語法。


創建
#

創建資料庫
#

創建使用的是「CREATE」語法:

1CREATE DATABASE `資料庫名稱`;

創建資料表及欄位
#

由於要先指定資料庫才能使用裡面的資料表,所以先選擇資料庫:

1USE `資料庫名稱`;

之後創建資料表,創建格式如下:

1CREATE TABLE `資料表名稱`(
2	`欄位1名稱` 資料型態(長度) 屬性1 屬性2...,
3	`欄位2名稱` 資料型態(長度) 屬性1 屬性2...,
4	...
5);

範例
#

1CREATE TABLE `資料表名稱`(
2	`id` int AUTO_INCREMENT PRIMARY KEY,
3	`phone` char(10),
4	`name` varchar(20) DEFAULT 'Anonymous',
5	`age` int(3) NOT NULL
6);

語法說明
#

欄位格式為「欄位名稱 資料類別(長度) 屬性1 屬性2...」。每筆資料以「,」區隔。

  • 欄位「id」為「int」表示「整數」,範圍為「-2,147,483,648 ~ 2,147,483,647」。
    屬性 「PRIMARY KEY」則表示 主鍵,同時加上「AUTO_INCREMENT」使其能在新增一筆新資料時,自動累加 id 以確保資料筆之間的 id 值唯一。

  • 欄位「phone」為「char」表示「字元」,最大字元長度為「255」。在後方有「(10)」則限制其長度為 10 。(ps. 若長度不足 10 則會自動補足 10,總之在儲存上佔用的容量是固定的)

  • 而「name」欄位同樣是字元,但寫作「varchar」,最大字元長度為「65535」,差別在於資料儲存上,varchar(20)指的是若字元長度不足 20 ,則只會佔用資料的字元長度大小,相較於「char」更為彈性,通常建議使用這個類別而非「char」。
    屬性「DEFAULT」意思為「預設」。在新增資料筆時,若沒有指定該欄位的情況下,會自動寫入預設值,舉上述例子,當沒有指定「name」欄位寫入時,該欄位將自動寫入「Anonymous」。

  • 最後的「age」欄位屬性「NOT NULL」表示該欄位不能為空值
    若要表示該資料可以為空,則使用「NULL」屬性。
    若沒有特別指定,則使用系統預設,通常為「NULL」屬性。
    (ps. id 雖然沒有該屬性,但 PRIMARY KEY 屬性本身就自帶 NOT NULL 了)

另外,你也可以將欄位格式寫好後,在最後才將其定義為主鍵:

1CREATE TABLE `資料表名稱` (
2	`id` int AUTO_INCREMENT,
3	...
4	PRIMARY KEY(`id`)
5);

新增
#

想要在資料表內新增資料筆,則需要用到「INSERT」語法:

1INSERT INTO `資料表名稱`(`欄位1`, `欄位2`,...)
2VALUES (欄位1的值, 欄位2的值...);

填寫值的順序是對應前面欄位順序的。

這邊要特別注意的是,兩行之間並沒有,」或「;」區隔。
本質上它算是一行,只是為了提高可讀性,所以習慣寫作兩行或以上。

(ps. 另外,舉上述例子,我們不需要在新增時手動寫入「id」欄位,因為「AUTO_INCREMENT」會自動寫入。)

範例
#

舉上述創建例子中的資料表為例:

1INSERT INTO `資料表名稱`(`phone`, `name`, `age`)
2VALUES ("0123456789", "新之助", 5);

會寫入以下資料:

idphonenameage
10123456789新之助5

再寫入一筆,但這次只指定必要的欄位「age」:

1INSERT INTO `資料表名稱`(`age`)
2VALUES (19);

目前資料為:

idphonenameage
10123456789新之助5
2NULLAnonymous19
  • 由於 id 欄位的「AUTO_INCREMENT」屬性,所以自動累加上一筆資料的 id
  • 欄位 phone 並未指定,而又不存在預設值,因此為NULL (空值)
  • 欄位 name 並未指定,但存在預設值「Anonymous」,因此寫入預設值。
  • 欄位 age 指定為 19

但如果這麼寫:

1INSERT INTO `資料表名稱`(`name`, `phone`)
2VALUES ("小葵", "0987654321");

會發生什麼事情?

答案是噴一個錯誤 - Field 'age' doesn't have a default value
還記得剛剛創建資料表時,設置了 age 欄位為「NOT NULL」屬性嗎?
而在此並未給予 age 值,而 age 又不存在「DEFAULT」預設值,因此出錯。

Alpaca
作者
Alpaca
No one can stop my feet.
SQL-Basic - 本文屬於一個選集。
§ : 本文

相關文章

資料庫概念 DB、DBMS、SQL 之間的關係
·966 字
Computer-Science SQL Database

資料庫早已被大量使用,如果還分不清楚 Database 與 DBMS 及 SQL 的關係,那還真是場災難呢!

如何使用 Hexo 在 Github Pages 上部署部落格?
·3141 字
Computer-Science Hexo Github

想要創建部落格,但又不想要一堆複雜又用不到的功能,輕盈的靜態頁面及 Git 版本控制,使用 Markdown 來撰寫文章,用 Hexo 架設部落格並發布在 Github Pages 這一切就是那麼容易且方便。

Encode、Encrypt and Hash are different!
·5521 字
Computer-Science Cryptography Digital Signature Cyber Security

Encode (編碼)、Encrypt (加密)、Hash (雜湊) 一直令許多新手們搞混,雖然說可能運算後的結果看起來都是一串亂碼,但原理及使用場合卻天差地遠,千萬不要再分不清處了!

一招啟動 Windows 10 「終極效能」!讓你的電腦瞬間活起來!
·1087 字
Computer-Science Windows
Github 檔案太大無法推送!?安裝「Git-LFS」馬上解決!
·875 字
Computer-Science Github

使用 git push 推送檔案到 Github 上時,被告知檔案太大無法推送!?馬上教你怎麼解決!

進階 Google 搜尋技巧 - Google Hacking
·1706 字
Computer-Science Google

這個被稱作「Google Hacking」的技巧,不僅可以快速找到你要的資料,甚至常被拿來… 肉搜