วันอังคารที่ 16 ธันวาคม พ.ศ. 2557

คําสั่ง UPDATE,คําสั่ง SHOW

คําสั่ง UPDATE
UPDATE phonebook SET office= 'ศูนยเทคโนโลยีสารสนเทศและการสื่อสาร' WHERE id=6
เปนคําสั่งเพื่อทําการเปลี่ยนแปลงขอมูลในตารางใหเปนตามที่ตองการ
คําสั่ง USE
USE demo
 USE เปนคําสั่งสําหรับเลือกใช database SHOW TABLES แสดงตารางที่อยูใน database demo
ทั้งหมด
คําสั่ง FLUSH
FLUSH TABLES phonebook
เปนคําสั่งที่ใชสําหรับการลบหนวยความจําภายใน (Internal Cache) ที่ใชงาน ทั้งนี้การใชคําสั่ง FLUSH
จะอนุญาตเฉพาะ user ที่มีสิทธิ์ (Privilege) เทานั้น
Flush_option สามารถระบุไดดังนี้
 HOSTS ทําการลาง hose cache table เพื่อปรับปรุงขอมูลของ host หรือ client ที่
 คอนเน็กตเขาใชงาน ซึ่งอาจมีการเปลี่ยนแปลง IP address หรืออื่นๆ
 โดยเมื่อทําการ flush เรียบรอยแลวก็จะอนุญาตให host นั้นๆ ทําการศูนยเทคโนโลยีสารสนเทศและการสื่อสาร สป. การใชงานฐานขอมูล MySQL 60
 คอนเน็กตเขามาใหมอีกครั้งหนึ่ง
LOGS ปดและเปด log files ใหม
PRIVILEGES ทําการ reload สิทธิ์ตางๆ ของ user จาก grant tables ของ MySQL Server
TABLES ปด tables ทั้งหมด หากตารางใดยังถูกเปดอยูก็จะถูก force ใหปดลง


คําสั่ง SHOW
SHOW DATABASES
เปนคําสั่งสําหรับแสดงรายละเอียด (Information) ของ databases, tables, columns หรือ สถานะตางๆ
ของ Server
แสดงรายละเอียดของ Databases, Tables, Columns และ Indexes
 SHOW DATABASES แสดงรายชื่อ databases ทั้งหมดในระบบฐานขอมูล
SHOW TABLES แสดงรายชื่อ tables ทั้งหมดของ current database
SHOW OPEN TABLES แสดงรายชื่อ tables ที่ถูกเปดอยูในปจจุบัน
SHOW COLUMNS แสดงรายละเอียดฟลดทั้งหมดใน table นั้น
 (ใหผลลัพธเชนเดียวกับคําสั่ง DESCRIBE)
SHOW FIELDS ใหผลลัพธเชนเดียวกับ SHOW COLUMNS
SHOW INDEX แสดงรายละเอียดวามีดัชนีอะไรบางสําหรับ table นั้นๆ
SHOW KEYS ใหผลลัพธเชนเดียวกับ SHOW INDEX
คําสั่ง GRANT และ REVOKE
GRANT ALL PRIVILEGES ON demo TO user1@localhost WITH GRANT OPTION
REVOKE ALL PRIVILEGES ON demo FROM user1@localhost
- คําสั่ง GRANT เปนคําสั่งสําหรับการกําหนดสิทธิ์หรือความสามารถใดๆ ใหกับ user
- คําสั่ง REVOKE หรือคําสั่งที่ตรงกันขามกับ GRANT คือเปนการถอนหรือยกเลิกสิทธิ์ใดๆ จาก
user
การใชคําสั่ง GRANT หรือ REVOKE จะอนุญาตเฉพาะผูบริหารระบบในการกําหนดสิทธิ์ตางๆ สําหรับ
ผูใช ศูนยเทคโนโลยีสารสนเทศและการสื่อสาร สป. การใชงานฐานขอมูล MySQL 61
 MySQL จะแบงสิทธิ์ (Privilege) เปน 4 ระดับ คือ
1. Global level
ระดับบนสุด ครอบคลุมทุก database รายละเอียดสําหรับสิทธิ์ของระดับนี้จะถูกเก็บไวในตาราง
mysql.user
2. Database level
ระดับ database ครอบคลุมเฉพาะใน database อันใดอันหนึ่ง เชน ความสามารถในการกระทําใดๆ
ภายใน database นั้นๆ รายละเอียดสําหรับสิทธิ์ของระดับนี้จะถูกเก็บไวในตาราง mysql.db และ mysql.host
3. Table level
ระดับ table ครอบคลุมเฉพาะภายในตารางนั้นๆ เชน ความสามารถในการกระทํากับ table นั้นๆ
สามารถทําการ select, insert, delete, update ไดหรือไม เปนตน รายละเอียดสําหรับสิทธิ์ของระดับนี้จะถูกเก็บอยู
ในตาราง mysql.tables_priv
4. Column level
ระดับ column ครอบคลุมเฉพาะฟลดใดฟลดหนึ่งภายในตารางขอมูลรายละเอียดสําหรับสิทธิ์ของระดับ
นี้จะถูกเก็บอยูในตาราง mysql.columns_priv
รายละเอียด priv_type มดีังตอไปนี้
ALL PRIVILEGES FILE RELOAD
ALTER INDEX SELECT
CREATE INSERT SHUTDOWN
DELETE PROCESS UPDATE
DROP USAGE
- เราสามารถใช ALL หรือ ALL PRIVILEGES ไดอยางใดอยางหนึ่ง
- USAGE มีความหมายเทากับ no privileges โดยใชกรณีที่เราตองการ create user และกําหนดใหมี
สิทธิ์เปน no privileges
- การถอนสิทธิ์การ GRANT ของ user ใดๆ ใหใช priv_type เปน GRANT OPTION
ตัวอยาง: REVOKE GRANT OPTION ON … FROM …;
- การใช priv_type สําหรับ table: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,
GRANT, INDEX และ ALTER
- การใช priv_type สําหรับฟลด SELECT, INSERT, UPDATE
- การกาหนดส ํ ิทธิ์ระดับ database ใช ON *.*
- สําหรับ user_name สามารถระบุไดถึงโฮสตที่ใชงาน เชน mysql@localhost หรือ root@’%’
 ศูนยเทคโนโลยีสารสนเทศและการสื่อสาร สป. การใชงานฐานขอมูล MySQL 62

คําสั่ง DELETE,คําสั่ง TRUNCATE,คําสั่ง INSERT

คําสั่ง DELETE
DELETE FROM phonebook WHERE id=4
เปนคําสั่งสําหรับลบขอมูลจากตาราง โดยสามารถกําหนดเงื่อนไขสําหรับการลบไดซึ่งถาไมไดระบุ
เงื่อนไขจะเปนการลบขอมูลทั้งหมดออกจากตารางและถาอยูใน AUTOCOMMIT mode (กรณีปกติทั่วไป) จะไม
สามารถทําการยกเลิกการลบครั้งนี้ได


คําสั่ง TRUNCATE
TRUNCATE phonebook
เปนคําสั่งที่ใหผลเชนเดียวกับ DELETE FROM table_name แตมีขอแตกตางดังนี้
- จะทําการดรอปตารางขอมูลกอน แลวทําการสรางใหมซึ่งจะใหผลที่เร็วกวาการลบ
ตารางทั้งหมด
- การทํางานเปน non-transaction ไมสามารถทําการยกเลิกได
คําสั่ง SELECT
SELECT id, fname FROM phonebook ORDER BY fname DESC
เปนคําสั่งสําหรับการแสดงผล หรือการดึงขอมูลจากตาราง โดยสามารถกําหนดเงื่อนไข รูปแบบและ
วิธีการไดอยางหลากหลายการดึงขอมูลสามารถระบุวาจะเลือกจากตารางเดียว หรือหลายตารางก็ได
การใชLIMIT rows ก็จะชวยกําหนดใหทําการดึงขอมูลจากตารางไดไมเกินจํานวนแถว rows ที่ระบุ
การใชคําสั่งคียเวิรดตามหลัง SELECT จะตองใชใหถูกตอง มีบางคียเวิรดที่ตองใชเรียงลําดับกัน เชน
HAVING clause ตองใชตามหลัง GROUP BY clause และใชกอน ORDER BY clause เปนตน
ตามปกติหากไมไดระบุวิธีการจัดเรียงขอมูลก็จะเปนการเรียงจากนอยไปมาก (Ascending) หรือคียเวิรด
ASC แตถาตองการเรียงจากมากไปนอย (Descending) ใหใชคียเวิรด DESC ศูนยเทคโนโลยีสารสนเทศและการสื่อสาร สป. การใชงานฐานขอมูล MySQL 59
การใชคียเวิรด HAVING จะใชในกรณีรวมกับ GROUP BY ซึ่งก็เปนการกําหนดเงื่อนไขในการดึง
ขอมูลดวยคําสั่ง SELECT
SELECT id,fname FROM phonebook GROUP BY fname HAVING id>2


คําสั่ง INSERT
INSERT INTO phonebook (id, fname, lname, email, office, province)
VALUES (6, 'sineenat', 'phradmali', 'sineenat@health.moph.go.th', 'ศทส.', '12')
เปนคําสั่งสําหรับการเพิ่มแถวขอมูล หรือระเบียนใหมเขาตารางขอมูล

คําสั่ง CREATE TABLE,คําสั่ง RENAME TABLE,คําสั่ง DROP TABLE

คําสั่ง CREATE TABLE
CREATE TABLE phonebook (id INT (4) NOT NULL
AUTO_INCREMENT, fname VARCHAR (35) , lname VARCHAR (35) ,
email VARCHAR (50) , office VARCHAR (200) , province CHAR (2) ,
PRIMARY KEY(id), UNIQUE(id), INDEX(id)) ศูนยเทคโนโลยีสารสนเทศและการสื่อสาร สป. การใชงานฐานขอมูล MySQL 57
โดยทั่วไปขนาดของตารางขอมูลหนึ่งๆ จะมีขนาดไมเกิน 2G หรือ 4G ขึ้นอยูกับระบบปฏิบัติการ เรา
สามารถทําใหประหยัดเนื้อที่ไดอีกโดยการบีบอัด (PACK) ขอมูลดัชนีซึ่งสามารถใหบีบอัดโดยกําหนดคา
PACK_KEYS=1 การบีบอัดนี้จะทําใหการทํางานชาลง แตก็ประหยัดเนื้อที่ขึ้น และตามปกติถาผูใชไมได
กําหนดใหบีบอัดขอมูลที่เปนสตริงหรือตัวอักษรก็จะไดรับการบีบอัดขอมูลอยูแลว สําหรับขอมูลตัวเลขคาการ
ทํางานปกติจะไมรับการบีบอัดเวนแตกําหนดการบีบอัดดวย
การใช UNION จะใชกรณีที่ตองการรวมตารางขอมูลหลายๆ ตารางเขาดวยกันเปนอันเดียว ซึ่งจะทํางาน
กับตารางประเภท MERGE เทานั้น
คําสั่ง ALTER TABLE
ALTER TABLE phonebook ADD tel VARCHAR(30)
 ALTER TABLE เปนคําสั่งสําหรับการปรับเปลี่ยนแกไขโครงสรางของตารางขอมูลเชน การเพิ่ม-ลบ
ฟลด, การสราง-ลบดัชนี, การเปลี่ยนประเภทขอมูลของฟลด, การเปลี่ยนชื่อฟลดเปนตน


คําสั่ง RENAME TABLE
RENAME TABLE phonebook to phone
เปนคําสั่งเพื่อเปลี่ยนชื่อตารางขอมูลเปนชื่อใหม


คําสั่ง DROP TABLE
DROP TABLE phonebook
เปนคําสั่งเพื่อใหลบตารางขอมูลออกจากระบบ สําหรับออปชัน RESTRICT และ CASCADE ยังไม
สามารถงานไดในปจจุบัน เนื่องจากเปนความสามารถที่มีแผนจะรองรับในอนาคต สําหรับการใชคําสั่ง DROP
TABLE จะตองใหความระมัดระวังในการใชงานเปนอยางยิ่งโดยเฉพาะการทํางานกับตารางขอมูลประเภท nontransaction
เพราะจะทําการ commit การทางานโดยอ ํ ัตโนมัติ
คําสั่ง OPTIMIZE TABLE
OPTIMIZE TABLE phonebook ศูนยเทคโนโลยีสารสนเทศและการสื่อสาร สป. การใชงานฐานขอมูล MySQL 58
เปนคําสั่งสําหรับจัดระเบียบขอมูลใหเปนระเบียบ หรือการทําดีแฟรกเมนตนั่นเองนั่นเอง เพราะถา
ตารางขอมูลมีการใชงานมานาน มีการใชงานที่ทําใหขอมูลมีการเปลี่ยนแปลงความยาว หรือเปลี่ยนขนาดของเนื้อ
ที่เก็บขอมูลโดยเฉพาะกับขอมูลประเภทท่ียืดหยุนไปตามขอมูลเชน VARCHAR, BLOB หรือ TEXT การใช
คําสั่ง OPTIMIZE TABLE ก็จะชวยใหมีการจัดระเบียบขอมูลใหดียิ่งขึ้น หากปลอยระยะเวลานานๆ จะเกิด
ชองวางระหวางขอมูลการอานขอมูลของสื่อจะไมราบรื่น ชา เนื่องจากเสียเวลาในการกระโดดขามชองวางนั้น
นั่นเอง

คําสั่ง CREATE DATABASE,คําสั่ง DROP DATABASE

คำสั่งต่างๆใน MySQL

ในบทนี้จะไดเรียนรูเกี่ยวกับคําสั่งตางๆ ใน MySQL ซึ่งเปนการรวมคําสั่งทั้งหมดไมวาจะเปนคําสั่งที่ใช
สําหรับการกําหนด (Data Definition Language), คําสั่งที่ใชสําหรับทํางานขอมูล (Data Manipulation Language)
และคําสั่งที่ใชสําหรับการควบคุมการทํางาน (Data Control Language)


คําสั่ง CREATE DATABASE
CREATE DATABASE demo
เปนคําสั่งสราง database ชื่อ db_name ขึ้นมาใหมในกรณีที่มี database นั้นอยูแลว ก็จะปรากฏขาวสาร
แสดงความผิดพลาด (Error Message) Can't create database 'demo'. Database exists


คําสั่ง DROP DATABASE
DROP DATABASE demo
เปนคําสั่งลบ database ชื่อ db_name ออกไปจากระบบ

วันอังคารที่ 9 ธันวาคม พ.ศ. 2557

คำศัพท์

รวมคำศัพท์คำสั่งที่เจอ
CREATE  สร้างdatabase, table
INSERT  ใส่ข้อมูล
UPDATE  อัพเดตข้อมูล
SELECT  ต้องการจะดูอะไรบ้าง
FROM    จากที่ไหน
WHERE   เงื่อนไขอย่างไร
COUNT(*)  นับจำนวนของฟิลข้อมูล
GROUP BY  จัดกลุ่มข้อมูล
ORDER BY  เรียงลำดับข้อมูลโดย
JOIN    เชื่อมตาราง
DISTINCT  ตัดตัวซ้ำ
AS      ใช้คำใหม่ให้กระทัดรัดขึ้น
SET     กำหนดตัวแปร
CURDATE() วันที่ปัจจุบัน
YEAR()  ปี
MONTH() เดือน
DAY()   วัน
RIGHT() ตัดคำจากทางขวา
LEFT()  ตัดคำจากทางซ้าย
*       ทั้งหมด


การใช้คำสั่ง JOIN

การใช้คำสั่ง JOIN
 การ JOIN คือการนำตารางที่มีความสัมพันธ์ของข้อมูลในแต่ละฟิลมาเชื่อมโยงกัน
 การ JOIN มี 2 แบบคือ
 1. INNER JOIN
 2. OUTER JOIN  |--- LEFT JOIN
    |--- RIGHT JOIN
INNER JOIN
 คือการ JOIN โดยไม่สนใจค่า NULL จะดูเพียงตัวที่เหมือนกันเท่านั้น
สมมติมีตาราง 2 อันชื่อ Ltable และ ​Rtable นำมา JOIN กันโดยมีข้อมูลที่ซ้ำกันคือ id
 -- JOIN โดยใช้ ON
 SELECT *
 FROM Ltable INNER JOIN Rtable ON Ltable.id = Rtable.id;
 -- หรือ JOIN โดยใช้ USING
 SELECT *
 FROM Ltable INNER JOIN Rtable USING (id);

กรณีพิเศษที่ตัวแปรหรือชื่อ Column ซ้ำกันก็สามาใช้ NATURAL JOIN ได้ อย่างในที่นี้เรารุ้ว่า id นั้นซ้ำกันเราก็ไม่ต้องใส่เงื่อนไขใดๆ แต่ใช้ Natural Join เข้ามาช่วยโดย
 SELECT *
 FROM Ltable NATURAL JOIN Rtable;
OUTER JOIN
·         LEFT JOIN
 คือการ JOIN โดยใช้ตัวทางซ้ายเป็นหลักคือ จะแสดงตัวทางซ้ายทุกตัวและนำข้อมูลขวามาเชื่อม
 SELECT *
 FROM Ltable LEFT JOIN Rtable ON Ltable.id = Rtable.id;
·         RIGHT JOIN
 คือการ JOIN โดยใช้ตัวทางขวาเป็นหลักคือ จะแสดงตัวทางขวาทุกตัวและนำข้อมูลขวามาเชื่อม
 SELECT *

 FROM Ltable RIGHT JOIN Rtable ON Ltable.id = Rtable.id;

การคำนวณเกี่ยวกับวันที่,การตั้งชื่อเป็นชื่อที่เราต้องการ,SET การกำหนดตัวแปร

การคำนวณเกี่ยวกับวันที่
 ตัวแปร DATE เป็น string ที่มีการเก็บเป็นรูปแบบ YYYY-MM-DD ตัวแปรชนิด DATE สามารถนำมาเทียบค่ากันได้ในระดับ ASCII
CURDATE() จะเป็น function ที่ส่งค่าออกมาเป็นข้อมูลรูปแบบ DATE (YYYY-MM-DD)
YEAR(<ข้อมูลชนิดdate>) ส่งค่าออกมาเป็นข้อมูลรูปแบบของปี (YYYY)
MONTH(<ข้อมูลชนิดdate>) ส่งค่าออกมาเป็นข้อมูลรูปแบบของเดือน (MM)
DAY(<ข้อมูลชนิดdate>)  ส่งค่าออกมาเป็นข้อมูลรูปแบบของวัน (DD)
RIGHT(<ข้อมูลชนิดstring>, <จำนวนตัวเลข>) ส่งค่าออกมาจำนวนเท่ากับที่เราต้องการตัดออกมาจาก string นั้นๆ โดยเริ่มนับจากทางขวา
LEFT(<ข้อมูลชนิดstring>, <จำนวนตัวเลข>) ส่งค่าออกมาจำนวนเท่ากับที่เราต้องการตัดออกมาจาก string นั้นๆ โดยเริ่มนับจากทางซ้าย
ตัวอย่าง
ex1. ต้องการปีของวันปัจจุบัน  YEAR( CURDATE() )
ex2. ต้องการเดือนและวันของปัจจุบัน RIGHT( CURDATE(),5 )
 [5 ในที่นี้คือนับจากทางขวามือมา YYYY-MM-DD ก็จะได้ ​MM-DD มา]
การใช้ตัวแปร NULL ในเงื่อนไข
 ใช้คำสั่ง xxx IS NOT NULL เช่นต้องการดูสิ่งมีชีิวิตที่ไม่มีเพศ
 SELECT *
 FROM   human
 WHERE sex IS NOT NULL;

การตั้งชื่อเป็นชื่อที่เราต้องการ
 หมายถึงเวลา select บางทีคนทั่วไปอาจจะไม่เข้าใจว่าคืออะไร เราจึงมีคำสั่ง AS ช่วย เช่น
 SELECT name AS ‘NAME-SURNAME’
 FROM   human;
COUNT การนับจำนวน + GROUP BY การจัดกลุ่ม
 COUNT ใช้ในการนับจำนวนของตารางต่างๆ จะใช้คู่กับ GROUP BY ได้ดีเพราะจะช่วยในการจัดกลุ่มชุดข้อมูลได้ดีขึ้น
 SELECT <อื่นๆ> COUNT(*)
 FROM <ชื่อtable>
 WHERE <เงื่อนไข>
 GROUP BY <จัดกลุ่มโดยใช้อะไร>
เช่นต้องการนับจำนวนคนในแต่ละเพศ
 SELECT sex , COUNT(*)
 FROM   human
 GROUP BY sex;

SET การกำหนดตัวแปร
 SET @<ชื่อตัวแปร> = <ค่า>
 เช่น  SET @A1 = ‘Natsu Sencho’;

  SET @A2 = ‘1999-09-09’;