【資料分析師_02_SQL+MySQL】007_MySQL的建表_01理論部分
阿新 • • 發佈:2020-12-19
MySQL的建表_01
概念:
- MySQL是“廠區”
- DB庫是“廠房”
- Table庫是“樓層”
利用CREATE TABLE
建立表,必須給出下列資訊: - 新表的名字
- 表列的名字和定義,用逗號分隔
輸入程式碼:
CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT , cust_name char(50) NOT NULL , cust_address char(50) NULL , cust_city char(50) NULL , cust_state char(5) NULL , cust_zip char(50) NULL , cust_country char(50) NULL , cust_contact char(50) NULL , cust_email char(255) NULL , PRIMARY KEY (cust_id) ) ENGINE = InnoDB ;
- 以上程式碼和EXCEL中的格式類似,包括:欄位名 / 欄位型別或長度 / 是否為空是否自動填充
- 還包括:主鍵是哪個欄位、
1 PRIMARY KEY
主鍵的設定
- 主鍵值必須唯一
PRIMARY KEY (cust_id)
為本表Table的 “主鍵” 即本表以哪一個欄位來進行索引- 表中的每個行必須具有唯一的主鍵值。
- 如果主鍵使用單個列,則它的值必須唯一。
- 如果使用多個列,則這些列的組合值必須唯一。
PRIMARY KEY (cust_id)
是用單個列作為主鍵。PRIMARY KEY (cust_id ,cust_name)
則是用兩個列作為主鍵。
2 AUTO_INCREMENT
自動編號
customers
表中的顧客由列cust_id
- 使用的最簡單的編號是:下一個編號 = 上一個編號 + 1
AUTO_INCREMENT
的作用是在MySQL每增加一行時,即每次執行一個INSERT操作時,讓MySQL自動對該列增量- (話外:這是一個 “計數器” ,也就是Counter,它記錄了表單裡最大的 id 編號,這樣就不用每次增加時都去查一遍表單裡最大的 id 了。)
3 DEFAULT
預設值
- 一般在需要填充一個值,但是沒有內容可以錄入時使用。
- 如果在插入行時沒有給出值,MySQL允許指定此時使用的預設值。
- 預設值用
CREATE TABLE
語句的列定義中的DEFAULT
關鍵字指定。 DEFAULT
的值可以預先設定好。
4 儲存引擎
儲存引擎解決的問題:以什麼檔案格式儲存在電腦硬碟上。
與其他DBMS一樣,MySQL有一個具體管理和處理資料的內部引擎。在使用CREATE TABLE
語句時,該引擎具體建立表,而在你使用SELECT
語句或進行其他資料庫處理時,該引擎在內部處理你的請求。多數時候,此引擎都隱藏在DBMS內,不需要過多關注它。
以下是幾個需要知道的引擎:
- InnoDB是一個可靠的事務處理引擎,不支援全文字搜尋。(其有一個TRANS模組,可以讓諸如 花錢/拿錢 的動作同步進行,而不會同一時間只執行一個。商業用途廣泛)
- MEMORY在功能等同於MyISAM,但由於資料儲存在記憶體中,速度很快(特別適合於臨時表,正常情況下用不到)。
- MyISAM是一個效能極高的引擎,它支援全文字搜尋但不支援事務處理。
5 ALTER TABLE
插入資料
為更新表定義,可使用ALTER TABLE
語句。但是,理想狀態下,當表中儲存資料以後,該表就不應該再被更新。在表的設計過程中需要花費大量時間來考慮,以便後期不對該表進行大的改動。
為了使用ALTER TABLE
更改表結構,必須給出下面的資訊:
- 在
ALTER TABLE
之後給出要更改的表名(該表必須存在,否則將出錯)。 - 所做更改的列表。
(注意:建議在一個很大的表中插入資料時,新建一張表進行操作,否則電腦在舊錶格中插入新內容時卡死會丟失資料!)
6 複雜表的更改
一般需要手動刪除過程,它涉及以下步驟:
- 用新的列布局建立一個新表(新建一個空表)
- 使用
INSERT SELECT
語句從舊錶複製資料到新表。如果有必要,可使用轉換函式和計算欄位(舊錶內容複製黏貼到空表中) - 檢驗包含所需資料的新表(檢查)
- 重新命名舊錶(舊錶備份)
- 用舊錶原來的名字重新命名新表(新表改名)