MySQL
Content Overview of MySQL’s Authentication Privilege system & user type MySQL structure การ backup และการ restore ฐานข้อมูล Trigger View Stored procedure Transaction
MySQL system Database Authentication request View Table Stored procedure
MySQL’s authentication Using username and password 2 levels of user System Administrator /DBA User
root มีสิทธิ์ทั้งในการจัดการ Database และ account Information: ในการติดตั้งโปรแกรม MySQL แต่ละครั้งจะมี account ที่เป็น DBA ถูกสร้างโดยอัตโนมัติจำนวน 1 account ซึ่งมี user name เป็น “root” ส่วน password ก็ขึ้นอยู่กับว่าผู้ติดตั้งโปรแกรมจะกำหนด root มีสิทธิ์ทั้งในการจัดการ Database และ account
MySQL’s privilege system 4 levels of privilege Global : ไม่มีเรื่องไหนทำไม่ได้ Database : ทำได้ทุกเรื่องแต่เฉพาะกับฐานข้อมูลที่กำหนด Table : ทำได้ทุกเรื่องแต่เฉพาะกับตารางข้อมูลที่กำหนด Field : ทำได้ทุกเรื่องแต่เฉพาะกับฐานฟิลด์ที่กำหนด
Relation of privilege and user level Global Database Table Field SA/DBA User
Information: ในครั้งแรกที่มีการสร้างฐานข้อมูลใหม่ ควรต้องมีการสร้าง account ใหม่สำหรับใช้จัดการฐานข้อมูลนั้นๆ ด้วย เพื่อที่ในครั้งต่อๆ ไปจะได้ใช้สิทธิ์ของ account นั้นในการจัดการฐานข้อมูลนั้น ซึ่งจะทำให้เกิดความปลอดภัยมากกว่าใช้ root โดยเฉพาะอย่างยิ่งการใช้งาน MySQL ร่วมกับ Web Application เพราะ account ที่ใช้จะต้องไปปรากฏใน code โปรแกรม ซึ่งหาก code ดังกล่าวรั่วไหลอาจทำให้ผู่ประสงค์ร้ายใช้สิทธ์ root เข้ามาทำลายฐานข้อมูลใน server ของเราได้
การสร้าง account ใหม่
การสร้าง account ใหม่
การสร้าง account ใหม่
การสร้าง account ใหม่
การสร้าง account ใหม่
การสร้าง account ใหม่
Structure
MySQL Structure
การสร้าง database
การสร้าง database
ผลลัพธ์ CREATE DATABASE `newdb` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
การสร้าง table
การกำหนดโครงสร้างให้กับ table
ผลลัพธ์
การกำหนดชนิดของ table
InnoDB : หากต้องการใช้ transaction ARCHIVE MRG_MYISAM ชนิดของ table MyISAM MEMORY InnoDB : หากต้องการใช้ transaction ARCHIVE MRG_MYISAM
การกำหนดชนิดของ table
Multiple language supporting Mysql support many character set. Latin Ascii: window874 ISO : tis620 UTF8
Multiple language supporting เราต้องเลือกใช้ character set ให้เหมาะสมกับข้อมูลที่จะจัดเก็บลง สำหรับการจัดเก็บข้อมูลที่เป็นภาษาไทย ภาษาอังกฤษ สามารถใช้ character set ที่ชื่อ tis620_thai_ci หรือ Utf8_unicode_ci
Multiple language supporting การกำหนด character set นั้นให้กระทำในขั้นตอนของการสร้าง database และ table เลย
การสร้าง trigger การลบ trigger
เหตุการณ์ที่เกิดกับข้อมูลได้แก่ Insert Update Delete What is Trigger? โปรแกรมที่ติดตั้งอยู่ที่ table ใดๆ จะทำงานเมื่อมีเหตุการณ์เกิดขึ้นกับข้อมูลใน table เหตุการณ์ที่เกิดกับข้อมูลได้แก่ Insert Update Delete ในแต่ละเหตุการณ์สามารถเลือกได้ว่าจะให้โปรแกรมทำงาน ก่อน หรือ หลัง เหตุการณ์
เมื่อมีการ insert การเข้าถึง recordใหม่จะใช้ keyword “NEW” เพื่อเข้าถึง record ใหม่นั้น เมื่อมีการ delete การเข้าถึง record ที่จะถูกลบจะใช้ keyword “OLD” เพื่อเข้าถึง record นั้น เมื่อมีการ update การเข้าถึง record ใหม่จะใช้ keyword “NEW” และใช้ “OLD” เพื่อเข้าถึง record เก่า ใน trigger สามารถสร้างตัวแปรได้ โดยใช้ “@” นำหน้าชื่อตัวแปร
Syntax for create Trigger ..1 CREATE TRIGGER <trigger name> { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <table name> FOR EACH ROW <triggered SQL statement> ;
Syntax for create Trigger ..2 CREATE TRIGGER <trigger name> { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON <table name> FOR EACH ROW BEGIN <triggered SQL statement (s)> END;
ตัวอย่าง 1 CREATE TRIGGER trg1 BEFORE UPDATE ON table1 FOR EACH ROW BEGIN SET @old = OLD . s1; SET @new = NEW.s1; END; การสร้าง trigger เพื่อทำงานในเหตุการณ์ก่อน(BEFORE)ที่จะมีการ update(UPDATE) record ในตาราง table1 โดยก่อนที่จะมีการ update แต่ละ record จะมีการสร้างตัวแปรชื่อ old เพื่อเก็บข้อมูลเดิมใน field ชื่อ s1 และตัวแปร new เก็บข้อมูลใหม่ใน field ชื่อ s1
ตัวอย่าง 2 : มี trigger > 1 ใน 1 ตาราง CREATE TRIGGER trg3 BEFORE INSERT ON table2 FOR EACH ROW IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF; CREATE TRIGGER trg4 BEFORE UPDATE ON table2 IF LEFT(NEW.s2,1)<>'A' THEN SET NEW.s1=0; END IF;//
ตัวอย่าง 3 : การสร้างตัวแปรและใช้งานตัวแปร ตัวอย่าง 3 : การสร้างตัวแปรและใช้งานตัวแปร CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount ; trigger ชื่อ ins_sum จะทำหน้าที่ในการสร้างตัวแปรชื่อ sum เพื่อเก็บข้อมูลผลรวมจาก field ชื่อ amount ของทุกๆ record ที่กำลังจะ insert แต่ไม่ใช่ตัวแปรที่อยู่ถาวร
ตัวอย่างการใช้ประโยชน์จากตัวแปรใน trigger CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount ; set @sum=0; INSERT INTO account VALUES(2,1),(3,1),(4,1); select @sum ; ผลลัพธ์ที่ได้จะเป็นผลรวมของข้อมูลที่กำลังจะ insert เท่านั้น
การลบ trigger (การ drop) DROP TRIGGER ชื่อtrigger; เช่น drop trigger ins_sum;
อะไรอยู่ใน triggered SQL statement เปลี่ยนแปลงข้อมูล (SET ….) IF Sql command เพื่อจัดการข้อมูล ในตารางอื่น คำสั่งในการเรียกใช้ function ที่ MySQL รู้จัก
set NEW.ename = upper(NEW.ename); create trigger a before insert on title for each row set NEW.ename = upper(NEW.ename); การเปลี่ยนข้อความภาษาอังกฤษให้เป็นตัวพิมพ์ใหญ่ก่อนที่จะจัดเก็บลงตาราง
mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END;// mysql> delimiter ;
CREATE TRIGGER member_after_update AFTER UPDATE ON member FOR EACH ROW BEGIN INSERT INTO member_audit_trail SET action='update', id=OLD.id, old_name=OLD.name, name=NEW.name, changed=NOW(); END;//
Create view syntax Edit view syntax Drop view syntax
ลดภาระการ join หลายๆ ตารางในคำสั่งของ Application What is VIEW? ตารางข้อมูลที่ไม่มีอยู่จริง แต่เป็นตารางข้อมูลที่เกิดขึ้นจากการรวมข้อมูลจากหลายๆ ตารางมาไว้ในตารางเดียว ใช้ประโยชน์เพื่อ ลดภาระการ join หลายๆ ตารางในคำสั่งของ Application สร้างข้อมูลที่มนุษย์อ่านแล้วเข้าใจมากขึ้น (เพราะการ normalization ทำให้ข้อมูลในตารางหลักจะมีแต่รหัสข้อมูล ข้อมูลที่เป็นคำบรรยายจะถูกแยกตาราง)
ตัวอย่างการสร้าง VIEW student title major
ตัวอย่างการสร้าง VIEW ที่ student จะทราบว่ามีนิสิตชื่อ สกุล อะไรบ้างแต่ title และ major ยังไม่ทราบว่าเป็นอะไร เพราะถูกเข้ารหัสอยู่ ดังนั้นหากต้องการทราบต้องเปิดตารางtitle และ major ดู ที่ละตาราง หรือใช้คำสั่ง join ทั้ง 3 ตารางเข้าด้วยกัน
คำสั่ง SQL ในการ join ทั้ง 3 ตารางเข้าด้วยกัน SELECT s.id, t.tname AS title, s.tname AS name, s.tsurname AS surname, m.tname AS major FROM student AS s LEFT JOIN ( major AS m, title AS t) ON ( s.major_id = m.id AND s.title_id = t.id ) ;
Syntax ในการสร้าง VIEW CREATE VIEW ชื่อที่ต้องการ AS select-statement ; Create view std as SELECT s.id, t.tname AS title, s.tname AS name, s.tsurname AS surname, m.tname AS major FROM student AS s LEFT JOIN ( major AS m, title AS t) ON ( s.major_id = m.id AND s.title_id = t.id ) ;
เรียกดูข้อมูลใน view Select * from std;
Syntax ในการแก้ไข view ..1 ALTER VIEW ชื่อที่ต้องการแก้ไข AS select-statement ใหม่ ; alter view std as SELECT s.id, t.tname AS title, s.tname AS name, s.tsurname AS surname, m.tname AS major FROM student AS s, major AS m, title AS t WHERE s.major_id = m.id AND s.title_id = t.id ;
Syntax ในการแก้ไข view ..2 CREATE OR REPLACE VIEW ชื่อที่ต้องการแก้ไข AS select-statement ใหม่ ; Create or replace view std as SELECT * FROM student ; หากไม่มี view ชื่อ std มาก่อน จะถือว่าเป็นการสร้างใหม่ แต่ถ้ามี std แล้วจะถือว่า เป็นการแก้ไขของเดิม
การลบ view Drop view ชื่อview
:โปรแกรมที่ทำงานในตัวฐานข้อมูล :ไม่สามารถทำใน phpmyadmin ได้ Stored procedure :โปรแกรมที่ทำงานในตัวฐานข้อมูล :ไม่สามารถทำใน phpmyadmin ได้
การสร้าง การลบ การแสดงสถานะ การแสดงรายละเอียด การใช้งาน (การ call) Content การสร้าง การลบ การแสดงสถานะ การแสดงรายละเอียด การใช้งาน (การ call)
ตัวอย่างการสร้าง stored procedure CREATE PROCEDURE b () BEGIN update title set ename='123' where id =4; END;
CREATE DEFINER=`root`@`localhost` PROCEDURE `a` (in sid varchar(10) , in stn varchar(100), in sts varchar(100), in sen varchar(100),in ses varchar(100), in sti smallint, in smi smallint, in st varchar(100),in sm varchar(100) ) Begin Declare lasttitleid smallint default 0; Declare lastmajorid smallint default 0; if sti = -1 then insert into title(tname) values(st); set lasttitleid =last_insert_id(); else set lasttitleid = sti; end if; if smi = -1 then insert into major(tname) values(sm); set lastmajorid =last_insert_id(); set lastmajorid = smi; insert into student(id,tname,tsurname,ename,esurname,title_id,major_id) values(sid,stn,sts,sen,ses,lasttitleid,lastmajorid); end;
การลบ drop procedure ชื่อprocedure; การแสดงprocedure ที่มีในฐานข้อมูล show procedure status; การแสดงรายละเอียด show create procedure ชื่อprocedure; การใช้งาน (การ call) call ชื่อprocedure(….);
2 means of backup 2 means of restore Backup & Restore 2 means of backup 2 means of restore
How to backup database การทำสำเนาไฟล์ การ export ข้อมูล
ไปที่ folder ชื่อ mysql\data มองหา folder ที่มีชื่อเดียวกับฐานข้อมูล How to backup database การทำสำเนาไฟล์ stop service ของ MySQL ไปที่ folder ชื่อ mysql\data มองหา folder ที่มีชื่อเดียวกับฐานข้อมูล สำเนา folder ดังกล่าวไว้
How to backup database การ export ข้อมูล