Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQL簡易教學

 MySQL簡易教學

MySQL簡易教學

Chein-Wei Huang

October 07, 2012
Tweet

More Decks by Chein-Wei Huang

Other Decks in Programming

Transcript

  1. 新生訓練 新生訓練 新生訓練 新生訓練 高速網路實驗室 High Speed Network Group Lab

    講者 講者 講者 講者: : : :黃健瑋 黃健瑋 黃健瑋 黃健瑋 8/20 - MySQL
  2. Variable char 固定長度 varchar 儲存內容長度可變動 高速網路實驗室 High Speed Network Group

    Lab 4 長度還是不能亂給!(temporary table) 盡量不要超過170 ‘a’和’我’在char(varchar)裡都只佔一格 text 長度較長的,例如文章內容 資料不存在table裡
  3. Variable enum(‘y’,’n’) 最快!! Speed: enum(‘y’,’n’) > char(1) > bool =

    tinyint(1) 高速網路實驗室 High Speed Network Group Lab 6
  4. Variable datetime 年月日時秒 date 幾月幾號請用這個 高速網路實驗室 High Speed Network Group

    Lab 7 timestamp 當下時間 錯誤例子 選課結束日期用datetime,且只輸入年月日 now()和datetime比較會有錯
  5. 查詢 SELECT 新增 INSERT INTO 刪除 DELETE FROM 修改 UPDATE

    SET Query 高速網路實驗室 High Speed Network Group Lab 8 修改 UPDATE SET
  6. 查詢 SELECT SELECT 欄位1,欄位2 FROM 表 WHERE SELECT * FROM

    表 WHERE 欄位 = ‘資料’AND 欄位 = ‘資料’ Query 高速網路實驗室 High Speed Network Group Lab 9 盡量只取自己要的欄位
  7. Query 錯誤例子 SELECT b FROM table WHERE a=‘a’ …… SELECT

    c FROM table WHERE a=‘a’ 高速網路實驗室 High Speed Network Group Lab 10 …… SELECT d FROM table WHERE a=‘a’ 修正 SELECT b, c, d FROM table WHERE a=‘a’
  8. Query course name, propery teacher_course course_name, teacher 高速網路實驗室 High Speed

    Network Group Lab 11 取出某個老師的課程? 使用join(inner join) ! SELECT C2.course_name FROM course AS C1, teacher_course AS C2 WHERE C2.teacher = ‘tom’ AND C1.name = C2.course_name
  9. Query 如果要從課程表中取出多個不同性質的課程名稱? SELECT name FROM course WHERE property = ‘a’

    OR property = ‘b’ OR property = ‘c’ …… ? 高速網路實驗室 High Speed Network Group Lab 12
  10. Query 較好的寫法 SELECT name FROM course WHERE property IN (‘a’,

    ‘b’, ‘c’, ……) 高速網路實驗室 High Speed Network Group Lab 13
  11. Query 較好的寫法 SELECT name FROM course WHERE number = (SELECT

    MAX(number) FROM course) OR SELECT name FROM course AS C1, (SELECT 高速網路實驗室 High Speed Network Group Lab 15 SELECT name FROM course AS C1, (SELECT MAX(number) AS max_number FROM course) AS C2 WHERE C1.number = C2.max_number 錯誤寫法 SELECT name FROM course WHERE number IN (SELECT MAX(number) FROM course)
  12. Query 怎麼取課程表內各個性質裡最多的人數? SELECT MAX(number) WHERE property = ‘a’ SELECT MAX(number)

    WHERE property = ‘b’ SELECT MAX(number) WHERE property = ‘c’ 高速網路實驗室 High Speed Network Group Lab 16 ……
  13. 新增 INSERT INTO INSERT INTO 資料表 ( 欄位1, 欄位2, 欄位3)

    VALUES (‘1’, ‘2’, ‘3’) INSERT INTO 資料表 Query 高速網路實驗室 High Speed Network Group Lab 19 ( 欄位1, 欄位2, 欄位3) VALUES (‘1’, ‘2’, ‘3’), (‘4’, ‘5’, ‘6’)
  14. 刪除 DELETE FROM DELETE FROM 資料表 所有資料列都刪掉,資料表還在 DELETE FROM 資料表

    WHERE 欄位 = ‘資料’ Query 高速網路實驗室 High Speed Network Group Lab 20 WHERE 欄位 = ‘資料’ 符合條件的資料列 可以先用SELECT看會刪到什麼資料
  15. Query 刪除性質是’a’的課程 DELETE FROM course WHERE property = ‘a’ 檢查

    SELECT * FROM course WHERE property = ‘a’ 高速網路實驗室 High Speed Network Group Lab 21
  16. 修改 UPDATE SET UPDATE 資料表 SET 欄位1 = ‘資料’, 欄位2

    = ‘資料’, 欄位3 = ‘資料’ WHERE 欄位 = ‘資料’ Query 高速網路實驗室 High Speed Network Group Lab 22
  17. Index 索引種類 Primary key: 唯一,不可為NULL的索引 Unique: 唯一,可為NULL的索引 Index: 一般索引 高速網路實驗室

    High Speed Network Group Lab 23 索引對照的問題 Ex: primay key(name, property, online, number) SELECT * FROM course WHERE name = ‘a’ AND online = ‘y’ AND number = ‘5’
  18. EXPLAIN EXPLAIN 觀察query下的好不好的指令 Ex: EXPLAIN SELECT * FROM course WHERE

    name = ‘a’; 高速網路實驗室 High Speed Network Group Lab 24
  19. EXPLAIN 重點 Rows 掃了多少行 Type const > eq_ref > ref

    > range > ALL (Performance) 高速網路實驗室 High Speed Network Group Lab 25 const > eq_ref > ref > range > ALL (Performance) Key 用到的索引是哪個
  20. Temporary Tables When create? ORDER BY + GROUP BY DISTINCT

    combined with ORDER BY When in disk? 高速網路實驗室 High Speed Network Group Lab 28 table include ‘BLOB’ or ‘TEXT’ any column in a GROUP BY or DISTINCT clause larger than 512 bytes