MySQLEnsky / 林宏昱
Why Database你也可以選擇用fopen + CSV土法煉鋼,但很快的你會遇到很多很多問題…林宏昱,小天,資工系,交通大學張哲彬,變態,資工系,交通大學你會發現,當多一點使用者的時候,兩個使用者同時註冊/發表文章的時候你的資料就會毀掉。
Why Databaseflock!沒錯,但以檔案為基礎的管理方式,速度非常的慢,若純用檔案可能使用者100人就會花很多時間在等待開鎖解鎖上了。還有很多很多問題阿,比如說你突然要新增一個欄位email此時用檔案系統的情況下,你需要每一行都打開來檢查
Why Database上面提到都是架構面的,而實際上使用者會需要對資料庫問一些奇怪的問題:• 找出鳥彬的學期成績這還好,怕的是• 找出鳥彬平均 >90 的學期,最高的三門科  目的教授們,他們的實驗室同學有哪些這種問題就需要關聯式資料庫來幫你囉!
Database Management System
Common DBMS
• 免費• 功能完整• 普及(大家都在用)• 我很熟…XD
phpMyAdmin
phpMyAdmin由於Console的操作方式實在不直覺因此有人用PHP寫出一套管理MySQL的網站叫做phpMyAdmin直接解壓縮到網頁根目錄就可以用了:P
Architecture• 一台DB server可以開很多個database  (一個project一個database這樣)• 一個database可以有很多table  (ex: user, forum, …)• 一個table可以有很多...
行&列姓名        性別         綽號林宏昱       Boy        小天張哲彬       ?          啪啪啪吳孟謙       女          腦bTable 的基礎,就是行(column)與列(ro...
資料型態 (DataType)•   INT        123•   VARCHAR    abcd•   TEXT       “這是有很多字的文章”•   DATE       2012-08-15•   DATETIME   2012...
Live Demo : Create table
索引 ( index )Database有一個技術,叫做index,當一個table的某個column被加上了index之後,他會被database建立索引,用他找資料會很快。比如說有個table user: stdid, name, sex,...
索引 ( index )索引有分以下類別• Primary key (主鍵) 資料中最具有代表性的一個欄位,唯一 ex: user中的學號 特性:一定要有值、唯一• Unique key (唯一鍵) 毫無反應,唯一的索引• Index (索引鍵...
索引 ( index )當設定成Primary key的時候,會有一個功能可以用,就是Auto Increment。有時候你可能會給每個user一個編號(id),第一個user編號是1,第二個編號是2,以此類推。此時就可以將id這個column...
Live Demo : Setting Index
關聯有些時候,Table之間會有一些關係userid        username    name         nickname1         ensky       林宏昱          小天2         Jalex   ...
關聯    有些時候,Table之間會有一些關係               User                                          Skillid   username    name     nickna...
關聯我們可以藉由設定foreign – key來建立兩個table之間的關係條件:• 要建立關係的兩個column都必須是index• 引擎必須是InnoDB
Live Demo: foreign key setting
Structured Query LanguageSQL是一個很特別的語言,他是專門設計來操作DBMS的。主要的操作方式,有Select(讀出來)、Update(更新)、Insert(插入資料)、Delete(刪除)不同的DBMS,SQL語句會...
InsertINSERT INTO `user` (`name`, `nick`)VALUES("林宏昱", "天天"),("張哲彬", "啪啪啪")
Select                 userid   username     name   nickname1    ensky        林宏昱    小天2    Jalex        張哲彬    啪啪啪       ...
Select Order By                 userid   username     name   nickname1    ensky        林宏昱    小天2    Jalex        張哲彬    啪...
Select Where                 userid   username     name   nickname1    ensky        林宏昱    小天2    Jalex        張哲彬    啪啪啪3...
Select Limit                           id    username     name    nicknameSELECT * FROM `user`       1     ensky        林宏...
Select Join                                                          User  SELECT *                                  id   ...
Select Distinct                user1                                     username    nickname                             ...
Select                        score                                     username    scoreSELECT SUM(`score`)   SUM(`score`...
Select Count                  user1                                    username    nicknameSELECT COUNT(*)      COUNT(*)  ...
Select subQuery          score                               username    scoreSELECT *                       ensky       7...
Update              score                                username    scoreUPDATE `score`                  enskyy      75SE...
DeleteDELETE FROM `user`WHERE nickname = "啪啪啪"                  User     id   username    nickname     1    ensky       小天...
Not Only SQL關聯式資料好用歸好用,也不一定適合所有case,他也有一些缺點,如:•   速度很慢•   擴展性不夠好•   容錯率不夠高•   要先定義欄位,對彈性的使用上不便
Not Only SQL而這些缺點在百TB、甚至PB為單位的資料量處理的時候就會浮現出來。比方說google會將使用者「搜尋紀錄」以及「最終連過去哪裡」存起來,這資料量是非常龐大的,無法以傳統Database做儲存及操作。
Not Only SQL也因此有很多「非關連式」的Database興起,其中分為以下種類:• 文件式資料庫:  – MongoDB, SimpleDB• Key-Value儲存  – 最終一致性 – Cassandra  – 硬碟 – BigT...
Homework• http://vm2.ensky.tw/phpMyAdmin1. 在test database裡面的user table裡   新增自己的資料(用介面)2. 用SQL把自己的資料刪掉3. 用INSERT新增自己的資料   用...
Upcoming SlideShare
Loading in …5
×

OpenWebSchool - 05 - MySQL

670 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
670
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

OpenWebSchool - 05 - MySQL

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

×