Your SlideShare is downloading. ×
OpenWebSchool - 05 - MySQL
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OpenWebSchool - 05 - MySQL

441
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
441
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MySQLEnsky / 林宏昱
  • 2. Why Database你也可以選擇用fopen + CSV土法煉鋼,但很快的你會遇到很多很多問題…林宏昱,小天,資工系,交通大學張哲彬,變態,資工系,交通大學你會發現,當多一點使用者的時候,兩個使用者同時註冊/發表文章的時候你的資料就會毀掉。
  • 3. Why Databaseflock!沒錯,但以檔案為基礎的管理方式,速度非常的慢,若純用檔案可能使用者100人就會花很多時間在等待開鎖解鎖上了。還有很多很多問題阿,比如說你突然要新增一個欄位email此時用檔案系統的情況下,你需要每一行都打開來檢查
  • 4. Why Database上面提到都是架構面的,而實際上使用者會需要對資料庫問一些奇怪的問題:• 找出鳥彬的學期成績這還好,怕的是• 找出鳥彬平均 >90 的學期,最高的三門科 目的教授們,他們的實驗室同學有哪些這種問題就需要關聯式資料庫來幫你囉!
  • 5. Database Management System
  • 6. Common DBMS
  • 7. • 免費• 功能完整• 普及(大家都在用)• 我很熟…XD
  • 8. phpMyAdmin
  • 9. phpMyAdmin由於Console的操作方式實在不直覺因此有人用PHP寫出一套管理MySQL的網站叫做phpMyAdmin直接解壓縮到網頁根目錄就可以用了:P
  • 10. Architecture• 一台DB server可以開很多個database (一個project一個database這樣)• 一個database可以有很多table (ex: user, forum, …)• 一個table可以有很多column (ex in user: name, sex, email, password, …)
  • 11. 行&列姓名 性別 綽號林宏昱 Boy 小天張哲彬 ? 啪啪啪吳孟謙 女 腦bTable 的基礎,就是行(column)與列(row)column代表不同的類別,row代表一列一列的資料。
  • 12. 資料型態 (DataType)• INT 123• VARCHAR abcd• TEXT “這是有很多字的文章”• DATE 2012-08-15• DATETIME 2012-08-15 14:00:00• BINARY 010101010111110001• ENUM 單選• SET 複選
  • 13. Live Demo : Create table
  • 14. 索引 ( index )Database有一個技術,叫做index,當一個table的某個column被加上了index之後,他會被database建立索引,用他找資料會很快。比如說有個table user: stdid, name, sex, email我在學號上建立索引,就可以很快的用學號找到人。
  • 15. 索引 ( index )索引有分以下類別• Primary key (主鍵) 資料中最具有代表性的一個欄位,唯一 ex: user中的學號 特性:一定要有值、唯一• Unique key (唯一鍵) 毫無反應,唯一的索引• Index (索引鍵) 毫無反應,不唯一的索引
  • 16. 索引 ( index )當設定成Primary key的時候,會有一個功能可以用,就是Auto Increment。有時候你可能會給每個user一個編號(id),第一個user編號是1,第二個編號是2,以此類推。此時就可以將id這個column設定成primary key,並且讓他有auto increment功能,此時每插入一筆新的user,id就會自動是max(id) + 1
  • 17. Live Demo : Setting Index
  • 18. 關聯有些時候,Table之間會有一些關係userid username name nickname1 ensky 林宏昱 小天2 Jalex 張哲彬 啪啪啪3 fancy0305 羅宛琪 重訓一姊user_skilluser_id blood skill power1 100 寫網頁 1502 200 爆肝 1003 50 重訓 10000
  • 19. 關聯 有些時候,Table之間會有一些關係 User Skillid username name nickname id name attack defense1 ensky 林宏昱 小天 1 寫網頁 50 502 Jalex 張哲彬 啪啪啪 2 爆肝 -50 -503 fancy0305 羅宛琪 重訓一姊 3 重訓 1000 1000 user_id skill_id 1 1 1 2 2 2 user_skill 3 2 3 3
  • 20. 關聯我們可以藉由設定foreign – key來建立兩個table之間的關係條件:• 要建立關係的兩個column都必須是index• 引擎必須是InnoDB
  • 21. Live Demo: foreign key setting
  • 22. Structured Query LanguageSQL是一個很特別的語言,他是專門設計來操作DBMS的。主要的操作方式,有Select(讀出來)、Update(更新)、Insert(插入資料)、Delete(刪除)不同的DBMS,SQL語句會有點小小的不同,但都大同小異,一個通其他的也會通。
  • 23. InsertINSERT INTO `user` (`name`, `nick`)VALUES("林宏昱", "天天"),("張哲彬", "啪啪啪")
  • 24. Select userid username name nickname1 ensky 林宏昱 小天2 Jalex 張哲彬 啪啪啪 username3 fancy0305 羅宛琪 重訓一姊 ensky JalexSELECT * FROM `user` fancy0305SELECT `username` FROM `user`SELECT `id`, `username` FROM `user`id username1 ensky2 Jalex3 fancy0305
  • 25. Select Order By userid username name nickname1 ensky 林宏昱 小天2 Jalex 張哲彬 啪啪啪3 fancy0305 羅宛琪 重訓一姊 id username name nicknameSELECT * FROM `user` 1 ensky 林宏昱 小天ORDER BY username 3 fancy0305 羅宛琪 重訓一姊 2 Jalex 張哲彬 啪啪啪SELECT * FROM `user` id username name nickname 2 JalexORDER BY username DESC 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊 1 ensky 林宏昱 小天
  • 26. Select Where userid username name nickname1 ensky 林宏昱 小天2 Jalex 張哲彬 啪啪啪3 fancy0305 羅宛琪 重訓一姊SELECT name FROM `user` nameWHERE `username` = "ensky" 林宏昱SELECT username, nickname FROM `user`WHERE `username` = "ensky" username nicknameOR `username` = "Jalex" ensky 小天 Jalex 啪啪啪
  • 27. Select Limit id username name nicknameSELECT * FROM `user` 1 ensky 林宏昱 小天 2 Jalex 張哲彬 啪啪啪 3 fancy0305SELECT * FROM `user` 羅宛琪 重訓一姊 id username name nicknameLIMIT 1 1 ensky 林宏昱 小天SELECT * FROM `user` id username name nicknameLIMIT 1, 2 2 Jalex 張哲彬 啪啪啪 3 fancy0305 羅宛琪 重訓一姊SELECT * FROM `user` id username name nicknameLIMIT 2, 1 3 fancy0305 羅宛琪 重訓一姊
  • 28. Select Join User SELECT * id username nickname FROM `user_skill` 1 ensky 小天 JOIN User 2 Jalex 啪啪啪 ON User.id = user_skill.id 3 fancy0305 重訓一姊 Skill id nameuser_id skill_id User. User. User. 1 寫網頁 id username nickname user_skill 2 爆肝 1 1 1 ensky 小天 user_id skill_id 3 重訓 1 2 2 Jalex 啪啪啪 1 1 2 2 2 Jalex 啪啪啪 1 2 3 2 3 fancy0305 重訓一姊 2 2 3 3 3 fancy0305 重訓一姊 3 2 3 3
  • 29. Select Distinct user1 username nickname ensky 小天假設現在我想撈unique的 Jalexusername 啪啪啪 Jalex 啪啪啪 fancy0305 重訓一姊 fancy0305 重訓一姊SELECT DISTINCT `username`FROM user1 username ensky Jalex fancy0305
  • 30. Select score username scoreSELECT SUM(`score`) SUM(`score`) ensky 75 Jalex 85FROM `score` 350 hwchiu 90 crack1108 90 smartboy 10SELECT SUM(`score`) AS `sum` sumFROM `score` 350SELECT MAX(`score`) AS `max` maxFROM `score` 90
  • 31. Select Count user1 username nicknameSELECT COUNT(*) COUNT(*) ensky 小天 Jalex 啪啪啪FROM `user1` 5 Jalex 啪啪啪 fancy0305 重訓一姊 fancy0305SELECT COUNT(*) AS `count` 重訓一姊 countFROM `user1` 5SELECT COUNT(DISTINCT username) AS `count`FROM ` user1 ` max 3
  • 32. Select subQuery score username scoreSELECT * ensky 75 Jalex 85FROM `score` hwchiu 90WHERE score = ( crack1108 90 smartboy 10 SELECT MAX(`score`) FROM `score`) username score hwchiu 90 crack1108 90
  • 33. Update score username scoreUPDATE `score` enskyy 75SET username = "ensky" Jalex 5WHERE username = "enskyy" hwchiu 90 crack1108 90UPDATE `score` smartboy 10SET `score` = 85WHERE username = "Jalex"UPDATE `score`SET `score` = `score` + 10
  • 34. DeleteDELETE FROM `user`WHERE nickname = "啪啪啪" User id username nickname 1 ensky 小天 2 Jalex 啪啪啪 3 fancy0305 重訓一姊
  • 35. Not Only SQL關聯式資料好用歸好用,也不一定適合所有case,他也有一些缺點,如:• 速度很慢• 擴展性不夠好• 容錯率不夠高• 要先定義欄位,對彈性的使用上不便
  • 36. Not Only SQL而這些缺點在百TB、甚至PB為單位的資料量處理的時候就會浮現出來。比方說google會將使用者「搜尋紀錄」以及「最終連過去哪裡」存起來,這資料量是非常龐大的,無法以傳統Database做儲存及操作。
  • 37. Not Only SQL也因此有很多「非關連式」的Database興起,其中分為以下種類:• 文件式資料庫: – MongoDB, SimpleDB• Key-Value儲存 – 最終一致性 – Cassandra – 硬碟 – BigTable, HBase – Ram – Redis, Memcached
  • 38. Homework• http://vm2.ensky.tw/phpMyAdmin1. 在test database裡面的user table裡 新增自己的資料(用介面)2. 用SQL把自己的資料刪掉3. 用INSERT新增自己的資料 用UPDATE把自己的user.id改成user.id – 14. 用INSERT把interest, user_interest的資料新增完5. 用SELECT + JOIN一次把三個table的資料讀出來

×