認識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)。例如在下例中,「陳小明的郵箱」是 [email protected]

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
    查看全部
    發表第一個留言支持創作者!
    你可能也想看
    識別危險訊號:自我認識和成長的旅程 導言: 在電視節目《BoJack Horseman》中,節目製作人拉斐爾·鮑伯·韋克斯伯格寫下了一句引人深思的話:“當你戴上玫瑰色眼鏡看別人時,紅旗只是看起來像旗子。” 雖然這句話最初是指戀愛關係中的紅旗,但對於內省和自我認識也同樣適用。我們常常很難認識到自己內部的警示信號,因為我們往往會對自
    Thumbnail
    avatar
    Robert Parkin
    2023-07-19
    食材錄☀柑橘認識史吃過、玩過、用過、聞過、洗過、欣賞過、享受過、接觸過、曾經種植但被毛毛蟲吃到掛掉過。真的是徹底體會柑橘類特別的歡樂力量,非常好玩啊!
    Thumbnail
    avatar
    鈴瀧編
    2022-02-12
    你必须认识当前影响潜力巨大的粉丝经济 Chiliz原文連結:https://zb.house/你必须认识当前影响潜力巨大的粉丝经济-chiliz/ 【本文章轉載自鑄幣局 - 提供專業的加密貨幣行業的研究成果的分析平台。】 “粉丝令牌让Chiliz与加密世界的联系更加紧密,这也说明加密货币将给主流社会的影响潜力巨大。” 项目愿景 团队 Sam Li
    Thumbnail
    avatar
    ZB.House
    2021-12-09
    认识自己  尼采曾说:“聪明的人,只要可以正确认识自己,便什么也不会失去。”由此可知,正确认识自我,是走好人生路的关键,对于自我的评价,因以自己为衡量标准,而不应以外物或他人评价为衡量自我的标准。   以物喜,可能会造成盲目自大,以物悲,可能会造成盲目自卑,对于认识自我,我们应以实际情况为衡量标准。不以物
    avatar
    千岁忧.
    2021-12-03
    實例認識現代產業的複雜,及如何牽動經濟(4):台灣後來的路?不管傳產還是科技業,要能夠傳承就得要說故事,把故事寫成書,經驗能夠傳下去。沒有傳承就只能師徒制一輩子,新血極難加入,失去活力的產業必定走向夕陽,這才是夕陽產業真正的問題。
    Thumbnail
    avatar
    王立第二戰研所
    2020-07-14
    實例認識現代產業的複雜,及如何牽動經濟(3):產業分布及經濟牽連各位以為,少掉幾家髒兮兮工廠沒差嗎?這些中小代工廠養活的人口數以百萬計,今天命脈被中國掌握,哪天波動一下就是數十萬人失業,或是無薪假影響百萬家庭。
    Thumbnail
    avatar
    王立第二戰研所
    2020-07-07
    實例認識現代產業的複雜,及如何牽動經濟(2):傳產的困境生產製程不是只有生產,還有前後處理各種項目。你以為傳產消失很好嗎?這代表的是相關產業,連同工廠附近的基本食衣住都消失掉,表面上關掉一間廠不過100人失業,連動到的終端人數可能超過10,000人。
    Thumbnail
    avatar
    王立第二戰研所
    2020-07-01
    實例認識現代產業的複雜,及如何牽動經濟(1):製程的複雜這個系列要談幾個主題,主要是要讓「非產業界」的人,了解現代產業的複雜,以及相關製程對環境的影響,受眾設定是非工科的人,以文法商組,且沒有在產業界,特別是傳產這一塊的為對象,希望這些朋友在談產業的去留,或是討論各種優惠與補貼,以及環保衛生政策的時候,能夠有更進一步的認識。
    Thumbnail
    avatar
    王立第二戰研所
    2020-06-23
    股票攻略2 — 认识股票 前言 投资心态:我是老板 涨跌原理  涨停跌停 两大风险 危险股票 三种获利 股票费用  交割制度 最佳消息来源 财报3步骤 除权、除息 指数VS个股 四大指标 结语   投资心态:我是老板 想要在股市赚钱,首先要建立老板心态。所
    avatar
    RichWee全球理財投資
    2020-05-18
    股票攻略1 — 认识股票文章索引 前言 历史寻根 何谓股票 股本/缴足资本 股票单位  四种类、四形式 结语 前言 众多理财工具中,股票应该算是最有知名度的明星。若想理财,这个工具必须懂得使用。一起进入股票的世界吧! 历史寻根:集资、分担、比例 地理大发现时期,哥伦布发现新大陆、麦哲伦团队
    Thumbnail
    avatar
    RichWee全球理財投資
    2019-11-06