認識MySQL

更新於 發佈於 閱讀時間約 8 分鐘

※ MySQL是什麼?

MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。

 簡單來說,資料庫是用來放置大量資料與檔案的一個倉庫,SQL是跟網站倉庫溝通的管員,而MySQL是用來管理倉庫的系統。因此,我們可以透過MySQL系統請SQL與倉庫溝通,管理資料庫中的資料。

※ 關聯式資料庫(RDBMS)是什麼?

關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。

關聯式資料庫有三個特質:

  1. 資料是用一個或是多個資料表 (table) 的方式存放。每一筆資料都是在 table 中的一個 record,然後再把不同的 table 集合起來,就成為一個關聯式資料庫。所以使用關聯式資料庫的網站,背後都有多個 table,負責紀錄不同的資料。
raw-image


例如在一個電商網站中,應該會有賣家、商品、分類、使用者和交易紀錄等資料表,而這些資料表各自也有不同的關聯。

  1. 資料之間有明確的關聯關聯式資料庫一般都用來儲存結構化的資料,而資料之間大多會有清楚的關聯。

例如:在建立 To-do List 的認證系統的時候,需要建立todo 跟 user 這兩種資料的直接關聯性。因此在關聯式資料庫裡,todo 跟 user會以兩個資料表來存放,而在兩個資料表之間,我們也會設定「使用者擁有 todo」這個關聯:

raw-image
  1. 以 SQL 語言操作。SQL (Structured Query Language 結構化查詢語言) 是一種專門用來管理與查詢關聯式資料庫的程式語言。透過 SQL,我們能在關聯式資料庫裡新增、查詢、更新和刪除資料,同時也能建立和修改資料庫模式。它的語法一切都是以資料為主角去思考。看一個簡單的 SQL 的範例:這句話的意思,就是「從 [TABLE_NAME] 的資料表中取出滿足 [COND] 條件的資料。
SELECT * FROM [TABLE_NAME] WHERE [COND];

綜合以上所述,由於關聯式資料庫須事先設計好架構,上線後如要進行欄位變更便會相當麻煩,若資料量龐大,變更Schema更是工程浩大。按照關聯式資料庫模型遵循嚴格的 ACID 屬性,對於已經有明確的資料格式,並預計未來不會有大幅度的變更的專案,多考慮選擇使用關聯式資料庫。 大多使用在網站開發、企業應用、日誌分析、數據倉庫等。

※ 認識資料表 Table

以下是一張通訊錄資料表,這張表格是數筆資料的集合。

raw-image

在資料表上,每一列 (row) 都代表一筆紀錄 (record),也就是「一筆資料」。

raw-image

垂直的欄在資料庫的術語裡被稱為資料欄位 (field),而他們代表的意義是屬性 (attribute)

raw-image

在資料表上最小的單位是格子 (cell),每個格子代表某一筆紀錄的某一個屬性的值 (value)。例如在下例中,「陳小明的郵箱」是 chen@example.com。

raw-image

創建一個資料表的時候,會替它取個名字 (table name),表示資料表中的資料是同一種類。

raw-image

每一個聯絡人都有一個獨一無二的識別碼,也就是第一欄的「編號」,也就是流水號。

raw-image

※ 常用的資料型態

  • 字串 (string): image、title
  • 文字段落 (text): description
  • 整數 (integer)
  • 浮點數 (float)
  • 日期時間 (datetime): release date
  • 布林值 (boolean)

※ 認識資料的關聯

  1. 一對一(One to One):一筆資料只會對應到最多一筆資料。

例:在一個購物網站裡,一個使用者只會有一個購物車,該購物車也只會被一個使用者所擁有。

raw-image
  1. 一對多(One to Many):一筆資料 A 會對應到多筆資料 B,但資料 B 反過來卻只會對應到一筆資料 A。

例:在一個購物網站的一個商品分類裡會有多個商品,而一個商品只會屬於一個分類。

raw-image
  1. 多對多(Many to Many):一筆資料 A 會對應到多筆資料 B,而一筆資料 B 也會對應到多筆資料 A。

例:一個使用者會參與多個活動,而一個活動也會有多個使用者參與。

raw-image


※ 辨識資料之間的關係

最基本的思考方式,是詢問在目前應用程式需求的情境下:

  • 資料 A 是否有多筆資料 B?
  • 資料 B 是否有多筆資料 A?

兩個問題都是 NO,代表資料 A 和 B 是一對一的關係。

如果其中一個是 NO,而另一個是 YES,那麼就是一對多的關係,看哪個資料是多的那方。

如果兩個問題都是 YES,那麼就是多對多的關係。

※ 使用主鍵和外鍵建立資料的關係

  • 主鍵 (Primary Key):代表一個資料表 (table) 裡的一筆資料具備唯一性(Uniqueness)的屬性,而每個資料表一定要有一個 primary key 的欄位。

特性:

  1. 唯一性 (Uniqueness):唯一性使得該屬性能獨一無二地代表一筆資料,不能讓其他同樣的屬性有一樣的值。

例:能代表學校學生資料唯一性的屬性,是學生證號碼、信箱和駕照號碼。

  1. 持有性 (Availability):

例:駕照號碼這個屬性雖然具備唯一性,但有些學生可能沒有駕照,故不滿足持有性,無法作為主鍵。

raw-image
  • 外鍵 (Foreign Key)「外鍵 (Foreign Key)」的功能是用來建立資料之間的關係,並且,外鍵一定是其他資料表的主鍵。至於外鍵的取名,通常會讓人能看得出來和另一個資料表的關係。

例:透過 album_id 可以找到在特定 album 的所有 photo。

raw-image


※ 一對一的關係 (One to One)

在一對一的關係裡,我們可以把任一 table 的 Primary Key 放入另一個 table 當 Foreign Key。

例:使用者 (User) 和購物車 (Cart) 是一對一的關係:

在 carts table 上增加一個 user_id 屬性作為 Foreign Key ,對應到 users table 的 id 屬性

raw-image

※ 一對多的關係 (One to Many)

我們要在「多」的那方 table 上新增 Foreign Key,對應到「一」那邊的 Primary Key。

例:一個分類 (Category) 會有多個商品 (Product),所以要把 categories 的 id 放入「多」的那端,也就是在 products table 上加入一個 category_id 屬性

raw-image

※ 多對多的關係(Many to Many)

在建立多對多關係的資料時,要在原本的兩個 table 之間,加上一個新的 Table。再讓原本的兩個 table 與新增的 table,建立一對多的關係。最後,才把原本的兩個 table 的 primary key 作為 foreign key 放入新增的 table 裡。

例:使用者 (User) 和商品 (Product) 是多對多的關係。

  • 第一步,在兩個 table 之間新增一個名為 orders 的 table,users 與 products 接著與 orders table 建立一對多的關係
raw-image
  • 第二步,設定 orders table 的 Primary Key 為 id
raw-image
  • 第三步,在 orders table 上新增一個 user_id 屬性,當成 Foreign Key,對應到 users table 裡的 id
raw-image
  • 第四步,把 products table 的 id 放入 orders table 裡,也就是在 orders table 上加入一個 product_id 欄位。
raw-image

注意:由於多對多關係會新增 join table,並拆解成兩個一對多的關係,所以在關聯式資料庫的設計裡,最後只會留下一對一和一對多的關係。





全端網頁開發專業知識分享
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
※ 什麼是MongoDB? MongoDB是一個開源、跨平台的非關聯式資料庫,屬於一種文件導向(Document-oriented database)的資料庫管理系統,也就是 NoSQL 數據庫管理系統(DBMS)。 ※ 什麼是非關聯式資料庫(NoSQL)? 非關聯式資料庫(NoSQL)的意思
※ 主題關鍵字 Git flow: ※ 說明: Git Flow 是一種基於 Git 版本控制系統的擴展,用於協助團隊進行項目的軟體開發和版本管理,就流程來說屬於概括性的流程。 這種工作流程定義了一組明確的分支模型,以協助有效地進行功能開發、修復錯誤和發布版本。 Git Flow
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
※ 必考題一: Command Line 工程師面試時通常不會著墨太多在此科目上,考題只考涵蓋的基本指令。 ※ 說明:Command Line是使用純文字與電腦溝通的方式,和圖形化介面 GUI是不一樣的。 ※ 常用基本指令: pwd=print the current directory:顯
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
※ 什麼是MongoDB? MongoDB是一個開源、跨平台的非關聯式資料庫,屬於一種文件導向(Document-oriented database)的資料庫管理系統,也就是 NoSQL 數據庫管理系統(DBMS)。 ※ 什麼是非關聯式資料庫(NoSQL)? 非關聯式資料庫(NoSQL)的意思
※ 主題關鍵字 Git flow: ※ 說明: Git Flow 是一種基於 Git 版本控制系統的擴展,用於協助團隊進行項目的軟體開發和版本管理,就流程來說屬於概括性的流程。 這種工作流程定義了一組明確的分支模型,以協助有效地進行功能開發、修復錯誤和發布版本。 Git Flow
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
※ 必考題一: Command Line 工程師面試時通常不會著墨太多在此科目上,考題只考涵蓋的基本指令。 ※ 說明:Command Line是使用純文字與電腦溝通的方式,和圖形化介面 GUI是不一樣的。 ※ 常用基本指令: pwd=print the current directory:顯
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
Ruby on Rails 是一個使用 Ruby 語言編寫的開源 Web 應用程式框架。 PostgreSQL 是一個強大、開源的物件關聯式資料庫系統,擁有超過 35 年的活躍開發歷程,並以其可靠性、功能強大性和效能而享有盛譽。 PostgreSQL 提供許多特定資料類型,以下是 Rails 支
Thumbnail
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
本文介紹了 MyISAM 和 InnoDB 儲存引擎原理的區別和比較,並從讀取效率和寫入效率、結構、任務以及操作等方面探討了兩者的差異。
Thumbnail
參考用各國藥典數據庫 (非官方/ 非最新)
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
如果MySQL忘記密碼,可以使用修改cnf檔案免去登入驗證,再進入MySQL重新設定密碼的方式,找回密碼,另外還附上有一般修改密碼的方式。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
Thumbnail
BigQuery 是 Google 推出的無伺服器資料倉儲方案,內建有查詢引擎(類似於 SQL),查詢引擎除了可以方便管理外,也能夠在短時間內對數 TB 的數據進行撈取。相較於其他的資料倉儲解決方案相比,它的成本較低,但如果你的資料量太大有可能成本還是超出你的預期
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
Thumbnail
Ruby on Rails 是一個使用 Ruby 語言編寫的開源 Web 應用程式框架。 PostgreSQL 是一個強大、開源的物件關聯式資料庫系統,擁有超過 35 年的活躍開發歷程,並以其可靠性、功能強大性和效能而享有盛譽。 PostgreSQL 提供許多特定資料類型,以下是 Rails 支
Thumbnail
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
本文介紹了 MyISAM 和 InnoDB 儲存引擎原理的區別和比較,並從讀取效率和寫入效率、結構、任務以及操作等方面探討了兩者的差異。
Thumbnail
參考用各國藥典數據庫 (非官方/ 非最新)
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
如果MySQL忘記密碼,可以使用修改cnf檔案免去登入驗證,再進入MySQL重新設定密碼的方式,找回密碼,另外還附上有一般修改密碼的方式。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
Thumbnail
BigQuery 是 Google 推出的無伺服器資料倉儲方案,內建有查詢引擎(類似於 SQL),查詢引擎除了可以方便管理外,也能夠在短時間內對數 TB 的數據進行撈取。相較於其他的資料倉儲解決方案相比,它的成本較低,但如果你的資料量太大有可能成本還是超出你的預期