Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
05 - MySQL - OpenWebSchool
Search
openwebschool
August 15, 2012
Programming
270
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
05 - MySQL - OpenWebSchool
openwebschool
August 15, 2012
More Decks by openwebschool
See All by openwebschool
11 - CodeIgniter - OpenWebSchool
openwebschool
1
370
09 - Node.JS - OpenWebSchool
openwebschool
1
400
07 - Javascript - OpenWebSchool
openwebschool
3
350
08 - js frontend & jQuery - OpenWebSchool
openwebschool
3
290
06 - PHP & MySQL - OpenWebSchool
openwebschool
1
300
03 - PHP II - OpenWebSchool
openwebschool
2
400
04 - CSS - OpenWebSchool
openwebschool
4
360
01 - W3 intro - OpenWebSchool
openwebschool
3
260
02 - PHP I - OpenWebSchool
openwebschool
3
280
Other Decks in Programming
See All in Programming
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
330
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
100
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.3k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
320
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.4k
SREの越境 / SRE Collaboration
y0hgi
2
290
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
330
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
140
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
33
14k
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
First, design no harm
axbom
PRO
2
1.3k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
960
New Earth Scene 8
popppiees
4
2.6k
Rails Girls Zürich Keynote
gr2m
96
14k
Paper Plane
katiecoart
PRO
4
53k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
560
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Transcript
MySQL Ensky / 林宏昱
Why Database 你也可以選擇用 fopen + CSV 土法煉鋼,但很快的 你會遇到很多很多問題 … 林宏昱
, 小天 , 資工系 , 交通大學 張哲彬 , 變態 , 資工系 , 交通大學 你會發現,當多一點使用者的時候,兩個使用者 同時註冊 / 發表文章的時候你的資料就會毀掉。
Why Database flock! 沒錯,但以檔案為基礎的管理方式,速度非 常的慢,若純用檔案可能使用者 100 人就會花 很多時間在等待開鎖解鎖上了。 還有很多很多問題阿,比如說你突然要新增 一個欄位
email 此時用檔案系統的情況下,你 需要每一行都打開來檢查
Why Database 上面提到都是架構面的,而實際上使用者會 需要對資料庫問一些奇怪的問題: • 找出鳥彬的學期成績 這還好,怕的是 • 找出鳥彬平均 >90
的學期,最高的三門科 目的教授們,他們的實驗室同學有哪些 這種問題就需要關聯式資料庫來幫你囉!
Database Management System
Common DBMS
• 免費 • 功能完整 • 普及(大家都在用) • 我很熟 …XD
phpMyAdmin
由於 Console 的操作方式實在不直覺 因此有人用 PHP 寫出一套管理 MySQL 的網站 叫做 phpMyAdmin
直接解壓縮到網頁根目錄就可以用了 :P phpMyAdmin
Architecture • 一台 DB server 可以開很多個 database ( 一個 project
一個 database 這樣 ) • 一個 database 可以有很多 table (ex: user, forum, …) • 一個 table 可以有很多 column (ex in user: name, sex, email, password, …)
行 & 列 姓名 姓名 姓名 姓名 性別 性別 性別
性別 綽號 綽號 綽號 綽號 林宏昱 Boy 小天 張哲彬 ? 啪啪啪 吳孟謙 女 腦 b Table 的基礎,就是行 (column) 與列 (row) column 代表不同的類別, row 代表一列一列的資料。
資料型態 (DataType) • INT • VARCHAR • TEXT • DATE
• DATETIME • BINARY • ENUM • SET 123 abcd “ 這是有很多字的文章 ” 2012-08-15 2012-08-15 14:00:00 010101010111110001 單選 複選
Live Demo : Create table
索引 ( index ) Database 有一個技術,叫做 index , 當一個 table
的某個 column 被加上了 index 之後, 他會被 database 建立索引, 用他找資料會很快。 比如說有個 table user: stdid, name, sex, email 我在學號上建立索引, 就可以很快的用學號找到人。
索引 ( index ) 索引有分以下類別 • Primary key ( 主鍵
) 資料中最具有代表性的一個欄位,唯一 ex: user 中的學號 特性:一定要有值、唯一 • Unique key ( 唯一鍵 ) 毫無反應,唯一的索引 • Index ( 索引鍵 ) 毫無反應,不唯一的索引
索引 ( index ) 當設定成 Primary key 的時候,會有一個功能可 以用,就是 Auto
Increment 。 有時候你可能會給每個 user 一個編號 (id) ,第 一個 user 編號是 1 ,第二個編號是 2 ,以此類推。 此時就可以將 id 這個 column 設定成 primary key , 並且讓他有 auto increment 功能,此時每插入 一筆新的 user , id 就會自動是 max(id) + 1
Live Demo : Setting Index
關聯 有些時候, Table 之間會有一些關係 user user_skill id username name nickname
1 ensky 林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 user_id blood skill power 1 100 寫網頁 150 2 200 爆肝 100 3 50 重訓 10000
關聯 有些時候, Table 之間會有一些關係 id username name nickname 1 ensky
林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 id name attack defense 1 寫網頁 50 50 2 爆肝 -50 -50 3 重訓 1000 1000 user_id skill_id 1 1 1 2 2 2 3 2 3 3 user_skill Skill User
關聯 我們可以藉由設定 foreign – key 來建立兩個 table 之間的關係 條件: •
要建立關係的兩個 column 都必須是 index • 引擎必須是 InnoDB
Live Demo: foreign key setting
Structured Query Language SQL 是一個很特別的語言,他是專門設計來操 作 DBMS 的。 主要的操作方式,有 Select(
讀出來 ) 、 Update( 更新 ) 、 Insert( 插入資料 ) 、 Delete( 刪除 ) 不同的 DBMS , SQL 語句會有點小小的不同, 但都大同小異,一個通其他的也會通。
Insert INSERT INTO `user` (`name`, `nick`) VALUES (" 林宏昱 ",
" 天天 "), (" 張哲彬 ", " 啪啪啪 ")
Select SELECT * FROM `user` SELECT `username` FROM `user` SELECT
`id`, `username` FROM `user` id username name nickname 1 ensky 林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 user username ensky Jalex fancy0305 id username 1 ensky 2 Jalex 3 fancy0305
Select Order By SELECT * FROM `user` ORDER BY username
SELECT * FROM `user` ORDER BY username DESC id username name nickname 1 ensky 林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 user id username name nickname 1 ensky 林宏昱 小天 3 fancy0305 羅宛琪 重訓一姊 2 Jalex 張哲彬 啪啪啪 id username name nickname 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 1 ensky 林宏昱 小天
Select Where SELECT name FROM `user` WHERE `username` = "ensky"
SELECT username, nickname FROM `user` WHERE `username` = "ensky" OR `username` = "Jalex" id username name nickname 1 ensky 林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 user name 林宏昱 username nickname ensky 小天 Jalex 啪啪啪
Select Limit SELECT * FROM `user` SELECT * FROM `user`
LIMIT 1 SELECT * FROM `user` LIMIT 1, 2 SELECT * FROM `user` LIMIT 2, 1 id username name nickname 1 ensky 林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 id username name nickname 1 ensky 林宏昱 小天 id username name nickname 3 fancy0305 羅宛琪 重訓一姊 id username name nickname 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊
Select Join id username nickname 1 ensky 小天 2 Jalex
啪啪啪 3 fancy0305 重訓一姊 id name 1 寫網頁 2 爆肝 3 重訓 user_id skill_id 1 1 1 2 2 2 3 2 3 3 user_skill User Skill SELECT * FROM `user_skill` JOIN User ON User.id = user_skill.id user_id skill_id User. id User. username User. nickname 1 1 1 ensky 小天 1 2 2 Jalex 啪啪啪 2 2 2 Jalex 啪啪啪 3 2 3 fancy0305 重訓一姊 3 3 3 fancy0305 重訓一姊
Select Distinct 假設現在我想撈 unique 的 username SELECT DISTINCT `username` FROM
user1 username nickname ensky 小天 Jalex 啪啪啪 Jalex 啪啪啪 fancy0305 重訓一姊 fancy0305 重訓一姊 user1 username ensky Jalex fancy0305
Select SELECT SUM(`score`) FROM `score` SELECT SUM(`score`) AS `sum` FROM
`score` SELECT MAX(`score`) AS `max` FROM `score` username score ensky 75 Jalex 85 hwchiu 90 crack1108 90 smartboy 10 score SUM(`score`) 350 sum 350 max 90
Select Count SELECT COUNT(*) FROM `user1` SELECT COUNT(*) AS `count`
FROM `user1` SELECT COUNT(DISTINCT username) AS `count` FROM ` user1 ` COUNT(*) 5 count 5 max 3 username nickname ensky 小天 Jalex 啪啪啪 Jalex 啪啪啪 fancy0305 重訓一姊 fancy0305 重訓一姊 user1
Select subQuery SELECT * FROM `score` WHERE score = (
SELECT MAX(`score`) FROM `score` ) username score ensky 75 Jalex 85 hwchiu 90 crack1108 90 smartboy 10 score username score hwchiu 90 crack1108 90
Update UPDATE `score` SET username = "ensky" WHERE username =
"enskyy" UPDATE `score` SET `score` = 85 WHERE username = "Jalex" UPDATE `score` SET `score` = `score` + 10 username score enskyy 75 Jalex 5 hwchiu 90 crack1108 90 smartboy 10 score
Delete DELETE FROM `user` WHERE nickname = " 啪啪啪 "
id username nickname 1 ensky 小天 2 Jalex 啪啪啪 3 fancy0305 重訓一姊 User
Not Only SQL 關聯式資料好用歸好用,也不一定適合所有 case ,他也有一些缺點,如: • 速度很慢 • 擴展性不夠好
• 容錯率不夠高 • 要先定義欄位,對彈性的使用上不便
Not Only SQL 而這些缺點在百 TB 、甚至 PB 為單位的資料量 處理的時候就會浮現出來。 比方說
google 會將使用者「搜尋紀錄」以及 「最終連過去哪裡」存起來,這資料量是非 常龐大的,無法以傳統 Database 做儲存及操作。
Not Only SQL 也因此有很多「非關連式」的 Database 興起, 其中分為以下種類: • 文件式資料庫: –
MongoDB, SimpleDB • Key-Value 儲存 – 最終一致性 – Cassandra – 硬碟 – BigTable, HBase – Ram – Redis, Memcached
Homework • http://vm2.ensky.tw/phpMyAdmin 1. 在 test database 裡面的 user table
裡 新增自己的資料(用介面) 2. 用 SQL 把自己的資料刪掉 3. 用 INSERT 新增自己的資料 用 UPDATE 把自己的 user.id 改成 user.id – 1 4. 用 INSERT 把 interest, user_interest 的資料新增完 5. 用 SELECT + JOIN 一次把三個 table 的資料讀出來