iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

一個月的後端學習之旅系列 第 28

【DAY28】SQL介紹、表格設定

  • 分享至 

  • xImage
  •  

資料庫管理系統 DBMS

我們為什麼需要資料庫?我們不能只將所有數據存儲在 Excel 表格中嗎?

儘管我們可以對電子表格中的數據進行排序和過濾,但資料庫具有廣泛的查詢功能,可以檢索與選擇條件匹配的所有記錄,並且在多個表格中做交叉引用記錄以及跨多個表格執行複雜的聚合計算

此外,就查詢資料而言,資料庫比 Excel 快上許多,在資料龐大時差別會更明顯 (Excel 可以處理最多大約 100 萬行數據,但對於現代資料來說明顯容量不足)

database management system (DBMS) 是一種為管理資料庫而設計的管理系統

具有代表性的資料管理系統有:Microsoft SQL Server、 MongoDB 、MySQL 及 PostgreSQL 等

資料庫在概念上來說,可以被分成兩種:

  • 關聯式資料庫 Relational Database (or SQL Database) -> SQLite、PostgreSQL、MySQL、SQL Server,用表格儲存
  • Non-Relational Database (or NoSQL Database) -> MongoDB、Redis,用 JSON 儲存 (數據彈性更好)

Relational Database

是一種存儲並提供對彼此相關的數據點的訪問的資料庫

例如,一家娛樂公司有一個資料庫來存儲他們所有的藝術家和歌曲數據,所有歌曲都有一位或多於一位作家,所有作家都有一首或多於一首歌曲,因此,該數據庫的每個表格之間是有關連的

ER Diagram (畫出表格於表格間相關的工具) 由美籍台灣人電腦科學家陳品山發明,常用於資訊系統設計中;對於大型的資料庫來說,建構的第一步就是設計資料庫,並且畫出 ER Diagram

增刪查改 CRUD

全稱增加 Create(建立)、刪除 Delete、查詢 Read(讀取)、改正 Update(更新),是在 DBMS 當中,一連串常見的操作行為

增刪查改除了常用於 SQL 資料庫之外,也在與網站的 API 埠口時常使用

網站的 API 埠口使用 HTTP 協定傳送通訊,所以原本的「增刪查改」所對應的英文詞彙會因此而改名,而不再對應 CRUD

比如「查」改為 GET;「增」改為 POST;「改」改為 PUT

Keys

關係鍵 keys 是關聯式資料庫的重要組成部分

關係鍵是一個表中的一個或幾個屬性,用來標識該表的每一行或與另一個表產生聯絡

在 DBMS 當中,主要的 keys 有:

  1. 主鍵 primary key – 是資料庫表中對儲存資料物件予以唯一和完整標識的資料列或屬性的鍵

一筆資料只能有一個主鍵(但可以由兩個以上的行組成 primary key),且主鍵的取值不能缺失,即不能為空值Null

  1. 外鍵 Foreign Key – 是指向其他表格的主鍵的欄位,用於確定兩張表格的關聯性

  2. 自然鍵 natural key –若使用在真實生活中唯一確定一個事物的標識,來當作資料庫的 primary key,則此 primary key 可被稱作是 natural key

例如,台灣的身分證字號可以當作資料庫的 natural key

  1. 代理鍵 surrogate key – 相對於 natural key,在當資料表格中的所有現有欄位都不適合當主鍵時,例如資料太長,或是意義層面太多,就會製作一個無意義的欄位來代為作主鍵

  2. 複合主鍵 composite key – 當資料表的 Primary Key,如果是由多個欄位組成,則稱為 composite key

SQL

結構化查詢語言 Structured Query Language 是一種特定目的程式語言,用於對關聯式資料庫管理系統下達指令

SQL 在 1987 年成為國際標準化組織(ISO)標準。雖然有這一標準的存在,但大部分的 SQL 代碼在不同的資料庫系統中並不完全具有的跨平台性

也就是說,雖然 SQL 這門程式語言可以用來操作 DBMS,但每個 DBMS 所接受的 SQL 語法有些微差異

例如,用來操作 MySQL 這個 DBMS 的 SQL 程式碼不能全部拿去用來操作 Microsoft SQL Server 這個 DBMS。(此課程中,會學的是 MySQL 所接受的 SQL)

練習

先在 MySQL 創造 database,創造完後才能在 popSQL 做連結

mysql> create database myDatabase;
Query OK, 1 row affected (0.01 sec)

database 會運行在電腦 localhost 3306 上 (localhost 3306 不行就打 127.0.0.1)

MySQL 創建完成後,就去 popSQL 做連結,以下為測試沒有連結成功的方式

測試能不能 創建表格
CREATE TABLE employees(
    employeeID int PRIMARY key
)

測試能不能 刪除表格
DROP TABLE employees;

SQL Data Types

Data Types Bytes Description
INT 4 bytes(32bits) 資料範圍是 (−2)^31 ~ 2^31 − 1 ( -2147483648 ~ 2147483467)
帶有小數點的數 DECIMAL(p, s) 視精確度而定 p 代表 total digits,s 代表小數點後的 digits。例如,153.23 為例,p 是 5,s 是 2。資料範圍是 (−10)^38 + 1 ~ 10^38 − 1
VARCHAR(n) 變動長度, max=2GB n 代表可以填幾個字 CHAR,資料範圍是 1 ~ 2^31 − 1
DATETIME 8 bytes 資料範圍是 1753/1/1 ~ 9999/12/31 ex: 2008-11-27 08:08:08.888

SQL 基本語法

通常關鍵字會大寫

創造新表格

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
    ....
);

得到表格資訊

DESCRIBE table_name

練習

CREATE TABLE employees (
    employeeID INT PRIMARY KEY,  -> PRIMARY KEY 有自帶 NOT NULL 的效果
    employeeName VARCHAR(25),
    age INT,
    salary INT,
    supervisor INT,
    departmentID INT
);

DESCRIBE employees;

下一篇文章學習增刪查改、Join 表格、SQL 與 NoSQL 比較


上一篇
【DAY27】 IP、DNS、Port、Request and Response
下一篇
【DAY29】增刪查改、Join 表格、SQL 與 NoSQL 比較
系列文
一個月的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言