什麼是 MySQL? SQL?
MySQL (MySQL Database Management System) 是一種開源的關係型數據庫管理系統(RDBMS),支持多用戶、多線程和多種存儲引擎,是一種基於SQL的數據庫,因此使用SQL (Structured Query Language )語言進行數據庫管理操作
簡單來說,SQL是一種程式語言,用於操作關係型數據庫,而MySQL是一種數據庫管理系統,它支持SQL語言,並提供了用於創建、管理和訪問數據庫的工具和服務
什麼是 MSSQL?
MSSQL (Microsoft SQL Server),是由Microsoft開發的一種關係型數據庫管理系統(RDBMS),是一個強大的數據庫系統,可以在Windows操作系統上運行
與MySQL差別在
1. MySQL是Oracle公司開發,而MSSQL是Microsoft公司開發
2. MySQL是一個開源的免費數據庫,一般可以免費下載和使用,商用也只要付少少的費用,而MSSQL是一個商業數據庫,需要購買許可證才能使用
3. MySQL通常比MSSQL更快,它具有更輕量級的架構,較少的系統資源使用和更快的查詢速度。但MSSQL處理大型資料方面表現更好
4. MySQL支援多個操作系統,Windows,Linux,Mac OS等,而MSSQL只支援Windows和一些雲服務平台
兩者儲存數據和查詢系統很相似,都支援 ANSI-SQL,也都可以使用 SQL 語言來查詢。兩者幾乎相通,只差在介面,會一種幾乎就等於會另一種了
為什麼想學 MySQL?
很實際的,想轉職,當西語業務久了很疲乏(其實也才三年),除了語言、興趣學的adobe軟體,我沒有任何深入的專長
2019在巴拿馬那年也意識到,自己不想當全職老師。對數據分析有興趣,就從這方向重新開始吧,也許學一學還能轉成後端、seo工程師、轉做app,甚至當數位游牧 越想越覺得~真~的~學不完
MySQL 怎麼學?
先看這部,其實跟 EXCEL 滿像的
之後看了這個
報名政府合作機構的就業輔導課程+各大學公開課程+自己買網課,彌補自己的不足
下面是學過的課程/看過的網頁,或想學還沒學的
怎麼安裝 MySQL?
進入MySQL Community,下載MySQL程式
【先來個基本概念】
表格是 tables,表格內容是 key
主鍵 (Primary Key) 「唯一」表示每一筆資料
emp_id 是主鍵 (Primary Key)
表格1employee
emp_id | name | major |
1101 |
Cata | Programming |
1102 | Tomas | Language |
1103 | Biga | Design |
外鍵 (Foreign Key) 對應到另一張表格的主鍵
branch_id 是外鍵 (Foreign Key)
表格1employee
emp_id | name | major | branch_id |
1101 | Cata | Programming |
1 |
1102 | Tomas | Language | 2 |
1103 | Biga | Design |
3 |
表格2branch
branch_id | branch name |
1 | software department |
2 | RD department |
3 | Design department |
外鍵 (Foreign Key) 也可以在自己的表格中設置外鍵 (Foreign Key)
sup_id 是外鍵 (Foreign Key)
表格1employee
emp_id | name | birth_date | sex | salary | major | branch_id | sup_id |
1101 | Cata | 0515 | F | 80000 | Programming |
1 |
null |
1102 | Tomas | M | 100000 | Language | 2 | 1101 | |
1103 | Biga | F | 80000 | Design |
3 |
1102 |
表格2branch
branch_id | branch name | manager_id |
1 | software department | 1101 |
2 | RD department | 1102 |
3 | Design department | 1103 |
表格3client
client_id | client_name | phone |
001 | Jordan | 02-2222-2222 |
002 | Maite | 03-3333-333 |
表格4work_with
emp_id client_id 同時是自己表格中的主鍵 (Primary Key),同時也是外鍵 (Foreign Key)
emp_id | client_id | total_sales |
1102 | 001 | 100000 |
1101 | 002 | 500000 |
1102 | 002 | 15000 |
1103 | 002 | 600000 |
【創建、刪減資料庫】
CREATE DATABASE 創建資料庫
DROP DATABASE 刪減資料庫
SHOW DATABASES 顯示所有資料庫
【CREATE 創建、DROP 刪減、ALTER TABLE ... ADD/ ALTER TABLE ... DROP COLUMN 增加/刪減表格列,
INSERT INTO 輸入表格資料、UPDATE+SET+WHERE 更改表格資料、DELETE+FROM+WHERE 刪除某列表格】
0. 一定要先 CREATE DATABASE 創建資料庫
SET SQL_SAFE_UPDATES = 0; 關閉預設更新模式
1. USE 資料庫
2. CREATE TABLE 在資料庫裡面創建表格 (<>DROP TABLE)
3. DESCRIBE 顯示表格
INT 整數
後面加一些 CONSTRAINTS 限制
AUTO_INCREMENT 會自動輸入 1 2 3...
DECIMAL (4,2) 總共四位數,兩位是小數
VANCHAR (10) 字串,最多10個字
( ) 後面加一些 CONSTRAINTS 限制
NOT NULL 值不能空白
UNIQUE 值不能重複
DEFAULT" " 預設內容
DATE 日期 YYYY-MM-DD
TIMESTAMP 日期時間 YYYY-MM-DD HH:MM:SS
BLOB 影片圖案
4. ALTER TABLE ...... ADD 增加列
5. ALTER TABLE ...... DROP COLUMN 刪除列
6. INSERT INTO `表格` VALUES 輸入表格資料,可以指定輸入某些項目
7. SELECT * FROM `表格` 顯示表格
8. UPDATE `表格` + SET `某欄名稱` = "更改後內容" + WHERE `某欄名稱` = "原內容" 更改表格內容
如果沒有WHERE, 欄位內,所有相符的屬性都會一起更改
9. UPDATE `表格` + SET `某欄名稱` = "更改後內容" + WHERE `某欄名稱` = "原內容",也可以替換內容
10. DELETE FROM `表格` + WHERE `某主鍵` = ; 刪除某列
11. AND OR >, <, <> 搭配使用
12. DELECT FROM `表格` 清空表格
【SELECT 選擇要顯示的內容】
SELECT `某欄名稱`, `某欄名稱` FROM `表格`;
SELECT * FROM `表格`; 整個表格都要
ORDER BY `表格` 排序
預設 ASC 由低到高, DESC 由高到低
LIMIT 筆數 限制回傳筆數
混 ASC DESC 使用
與 WHERE 混用
WHERE `表格` IN(" ", " ") 可代替 or 寫法
【試著創立多表格資料庫】
創立第一個表格 `employee`
設 PRIMARY KEY:
設 emp_id 為 PRIMARY KEY
emp_id | name | birth_date | sex | salary | major | branch_id | sup_id |
1101 | Cata | 1996-05-15 | F | 80000 | programming |
1 |
NULL |
1102 | Tomas | 1990-07-29 | M | 100000 | language | 2 | 1101 |
1103 | Biga | 1996-04-22 | F | 80000 | design |
3 |
1102 |
創立第二個表格 `branch`
設 PRIMARY KEY:
設 branch_id 為 PRIMARY KEY
設 FOREIGN KEY:
將 `branch`表格 的 `manager_id` 設為 `employee` 表格 的 `emp_id` 的 FOREIGN KEY
branch_id | branch name | manager_id |
1 | software department | 1101 |
2 | RD department | 1102 |
3 | Design department | 1103 |
設置連結
ON DELETE SET NULL 代表員工如果離職,manager_id 會被設為 NULL
設 FOREIGN KEY:
將 `employee`表格 的 `branch_id` 設為 `branch` 表格 的 `branch_id` 的 FOREIGN KEY
將 `employee`表格 的 `sup_id` 設為 `employee` 表格 的 `emp_id` 的 FOREIGN KEY
創立第三個表格 `client`
設 PRIMARY KEY:
設 client_id 為 PRIMARY KEY
client_id | client_name | phone |
001 | Jordan | 02-2222-2222 |
002 | Maite | 03-3333-333 |
創立第四個表格 `work_with`
ON DELETE CASCADE 代表員工如果離職,兩張表的' emp_id 、client_id 會跟著一起被刪掉
設 PRIMARY KEY:
設 emp_id 、client_id 為 PRIMARY KEY
設 FOREIGN KEY:
將 `work_wi th`表格 的 `emp_id` 設為 `employee` 表格 的 `emp_id` 的 FOREIGN KEY
將 ``work_with`表格 的 `client_id` 設為 `client` 表格 的 `client_id` 的 FOREIGN KEY
emp_id | client_id | total_sales |
1102 | 001 | 100000 |
1101 | 002 | 500000 |
1102 | 002 | 15000 |
1103 | 002 | 600000 |
表格都創立好後,開始輸入表格資料
第一張表格 `employee` 的 branch_id 是 FOREIGN KEY,在當下還沒對應到第二張表格 `branch` 的 branch_id
如果先輸入第二張 `branch` 表格? 第二張表格 `branch` 的 manager_id 是 FOREIGN KEY,在當下還沒對應到第一張表格 `employee` 的 emp_id
如果先把 `branch` 的 manager_id 都先設成 NULL? 兩張表建好再改回來就可以了!
繼續建好其他兩張表 `client`, `work_with`
練習一下
【練習】
aggregate functions 聚合函數
PS 這樣如果有男生符合條件,答案會錯誤
Wildcard 萬用字元
Union 聯集
Join 連接
Subquery 子查詢
留言列表