Try   HackMD

MySQL 上課隨手筆記

tags: MySQL, SQL

PS. ~夜晚的星空~ 原發表於 HiNet Xuite DATE: 05/31/2012 04:21:43 PM

Data Language

Data Definition Language (DDL)

CREATE, ALTER, DROP

Data Manipulation Language (DML)

SELECT, INSERT, DELETE, UPDATE

Data Control Language (DCL)

GRANT, DENY, REVOKE

Examples:

  • 創建一個叫 db01 的資料庫 CREATE Database db01;
  • 顯示目前有哪些 database show databases;
  • 目前正在使用的 database `select database();
  • 執行該檔案裡的指令 \. "Path to command file"
  • 於現在在的資料庫裡新增一個叫 Cust 的 table
    ​​CREATE TABLE Cust
    ​​(
    ​​  CustId char(10),
    ​​  CustName char(10),
    ​​  Addr char(10),
    ​​  Tel char(10)
    ​​);
    
  • 看現在在的資料庫裡有什麼 table show tables;
  • 刪掉現在在的資料庫裡的 cust table drop table cust;
  • 新增資料至 table,可以用逗號連續新增 raws
    ​​INSERT INTO cust(CustId, CustName, Addr, Tel)
    ​​VALUES ('C001', 'A-Comp', 'TP', '1236-4567'),
    ​​       ('C002', 'B-Comp', 'TP', '1236-4567'),
    ​​       ('C003', 'C-Comp', 'KS', '1236-4567'),
    ​​       ('C004', 'D-Comp', 'TP', '1236-4567');
    
  • 該欄位開頭為 D,且字串長度是 5。_ 代表要有字 WHERE ... LIKE 'D____'
  • 看 db01 裡有哪些 tables show tables from db01;
  • 看現在在的資料庫裡的 cust table 有什麼欄位 show columns from cust;
  • 在現在在的資料庫裡的 cust table 新增一個 Remark 欄位
    ​​ALTER TABLE cust
    ​​ADD Remarks char(10);
    
  • 在現在在的資料庫裡的 cust table 修改 Remark 欄位
    ​​ALTER TABLE cust
    ​​MODIFY Remarks char(20);
    
  • 在現在在的資料庫裡的 cust table 刪除 Remark 欄位
    ​​ALTER TABLE cust
    ​​DROP COLUMN Remarks;
    
  • char 和varchar 最長是 255 bytes
  • float 和 double 是近似值,如果要用小數點且是真值,就要用 decimal
  • SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY
    • WHERE 比 GROUP BY 先執行
    • GROUP BY 比 HAVING 先執行,HAVING 是依據 SELECT 的欄位
    • HAVING 比 ORDER BY 先執行,ORDER BY 是依據 SELECT 的欄位
  • NULL 的意義:1.空值,2.未知
    • NULL 要用 IS 判斷,不是 =
    • 任何值和 NULL 運算 (+, -, *, /) => 都會變 NULL
    • IFNULL(a, 0) 若 a 是 NULL,則用 0 取代
  • UNION 會自動 distinct
  • UNION ALL 不做 sdistinct
  • UNION 可以個別 SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING,但不可以個別 ORDER BY
  • 把 csv 檔匯入 Cust table
    ​​Load Data Infile 'C:/mysql/inv/cust.csv' into table Cust
    ​​Fields Terminated By ','
    ​​Lines Terminated By '\r\n'
    ​​Ignore 1 lines;
    
  • 在現在在的資料庫裡建立一個暫時表單 TMP
    ​​CREATE Temporary TABLE TMP
    ​​SELECT * FROM Emp;
    
  • 取得表單最後 Insert 的 primary key,須搭配 auto_increment 使用 SELECT LAST_INSERT_ID()
  • 將搜尋結果做成 View,view 只比直接 select 快一點點,差在 view 的 select 動作是已經 compile 過後
    ​​CREATE VIEW v1
    ​​AS SELECT ...
    
  • 將搜尋結果修改既有的 View
    ​​ALTER VIEW v1
    ​​AS SELECT ...
    
  • 將 t1 table 的 ID 設定成 index IDX_t1_1
    ​​CREATE INDEX `IDX_t1_1` ON `t1` (`ID`);
    
  • 將 t1 table 的 ID 加上 Name 設定成 index IDX_t1_2
    ​​CREATE INDEX `IDX_t1_2` ON `t1` (`ID`, `Name`);
    
  • 將開始執行的表示符號改成兩個斜線 delimiter //
  • 將開始執行的表示符號改成分號 delimiter ;

Procedure

Stored Procedure 是存在 Database 下

Ex #1:

USE db01
drop procedure if exists p1;
delimiter //
CREATE PROCEDURE p1()
BEGIN
  DECLARE n INT;
  SET n = 100;
  SELECT COUNT(*) INTO n FROM cust;
  SELECT n;
END
//
delimiter ;
call p1();

Ex #2:

USE db01
drop procedure if exists p2;
delimiter //
CREATE PROCEDURE p2(in arg1 int, in arg2 int)
BEGIN
  SELECT arg1 + arg2;
END
//
delimiter ;
call p2(3, 4);

Reference

MySQL: 事件排程器 (Event Scheduler) http://waxway.blogspot.tw/2011/12/mysql-event-schedule.html