เสรี ชิโนดม seree@buu.ac.th MySQL เสรี ชิโนดม seree@buu.ac.th
ฐานข้อมูลคืออะไร? ฐานข้อมูล(Database) คือ กลุ่มของข้อมูลแบบต่างๆที่รวบรวมไว้ และนำมาจัดเรียงให้เป็นระบบเพื่อใช้ตามวัตถุประสงค์ที่ต้องการ เช่น สมุดรายชื่อผู้ใช้โทรศัพท์ ทะเบียนรายชื่อนักศึกษา เป็นต้น PHP Programming
คุณสมบัติฐานข้อมูล การนำข้อมูลที่สัมพันธ์กันทั้งหมดมาไว้รวมกัน ข้อมูลที่มีลักษณะเป็นมาตรฐาน มีชุดเดียว ใช้ได้ทั้งหน่วยงาน มีระบบตรวจสอบป้องกัน เป็นอิสระจากโปรแกรม มีภาษาสอบถาม (QUERY LANGUAGE) ต้องมีระบบจัดการฐานข้อมูล (DATABASE MANAGEMENT SYSTEM) PHP Programming
ข้อดีของฐานข้อมูล ลดความซ้ำซ้อนของข้อมูล ใช้ข้อมูลร่วมกันได้ มีระบบจัดการความปลอดภัยของข้อมูล หลีกเลี่ยงความขัดแย้งของข้อมูล PHP Programming
ระบบจัดการฐานข้อมูล(DBMS) คือชุดของโปรแกรมคอมพิวเตอร์ซึ่งทำหน้าที่สร้าง ดูแลรักษา และใช้งานส่วนต่าง ๆของฐานข้อมูล PHP Programming
Application Programs/Queries User/Programmers DATABASE SYSTEM Application Programs/Queries DBMS SOFTWARE SOFTWARE TO PROCESS QUERIES/PROGRAMS SOFTWARE TO ACCESS DTORED DATA Store Database Definition (META-DATA) Stored DataBase PHP Programming
ระบบจัดการฐานข้อมูล(DBMS) ต้องมีการใช้งานทรัพยากรของคอมพิวเตอร์อย่างมีประสิทธิภาพ ทำหน้าที่ติดต่อกับตัวจัดการระบบไฟล์ การควบคุมการคงสภาพ การควบคุมระบบความปลอดภัย การสร้างระบบสำรองและการฟื้นสภาพ การควบคุมภาวะพร้อมกัน PHP Programming
แบบจำลองข้อมูล(Data Modelling) มี 3 แบบ ฐานข้อมูลแบบลำดับขั้น (Hierarchical Database Model) ฐานข้อมูลแบบข่ายงาน (Network Database Model) ฐานข้อมูลแบบตาราง (Relational Database Model) PHP Programming
แบบลำดับขั้น เป็นการแสดงความสัมพันธ์ของเอนติตี้ในแบบลำดับขั้น ซึ่งเริ่มจากเอนติตี้หลักแล้วย่อยลงไปเป็นเอนติตี้ต่างๆตามลำดับ เป็นความสัมพันธ์แบบพ่อกับลูก คณะ 1 1 N N N อาจารย์ นิสิต ห้อง lab N N วิชา PHP Programming
แบบข่ายงาน (Network Database) เป็นการแสดงความสัมพันธ์ของเอนติตี้ในแบบที่เอนติตี้มีความสัมพันธ์กับเอนติตี้อื่นๆได้หลายเอนติตี้ โครงการ คณะ 1 1 N N N N N อาจารย์ นิสิต ห้อง lab PHP Programming
ฐานข้อมูลเชิงสัมพันธ์ การจัดเก็บข้อมูลจะอยู่ในรูปของตารางมีคอลัมน์ และแถว ในแต่ละตารางจะเก็บข้อมูลเกี่ยวกับเรื่องใดเรื่องหนึ่งโดยข้อมูลในตารางหนึ่งอาจมีความสัมพันธ์กับตารางอื่นๆได้ เช่น ตารางที่เก็บข้อมูลการขาย กับตารางที่เก็บข้อมูลลูกค้า และตารางที่เก็บข้อมูลสินค้า เมื่อต้องการพิมพ์ใบสั่งซื้อ จะเห็นว่ามีข้อมูลจากทั้งสามตาราง คือ มีรายการขาย ชื่อ ที่อยู่ลูกค้า ชื่อ ราคาสินค้า ปริมาณการสั่งซื้อ ทั้งนี้ต้องมีการกำหนดความสัมพันธ์ระหว่างตารางต่างๆไว้ก่อน PHP Programming
ฐานข้อมูลเชิงสัมพันธ์ เก็บข้อมูลในรูปตาราง กลุ่มของข้อมูลที่จัดมีความสัมพันธ์กันในรูปแนวนอนและแนวตั้ง ซึ่งเรียกข้อมูลที่เรียงกันในรูปแนวนอนว่า เรคอร์ด(record) และจะเรียกข้อมูลที่วางในแนวตั้งว่า เขตข้อมูล(Field) PHP Programming
ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ หรือที่เรียกว่า RDBMS(Relational DataBase System) เป็นเครื่องมือในการจัดเก็บข้อมูล เพื่อให้ค้นหาข้อมูลแบบต่างๆได้ตามต้องการ นอกจากนี้ยังช่วยในการดูแลรักษาข้อมูล เช่นการแก้ไข เพิ่ม ลบข้อมูลตลอดจนการออกรายงานได้ง่ายขึ้น ความสามารถของระบบจัดการฐานข้อมูลมี 3 ประการคือ การกำหนดนิยามข้อมูล(Data Definition) การจัดการกับข้อมูล(Data Manipulation) การควบคุมข้อมูล(Data Control) PHP Programming
การกำหนดนิยามข้อมูล ได้แก่การกำหนดโครงสร้างของข้อมูลที่เก็บในฐานข้อมูล การกำหนดชนิดของข้อมูลและลักษณะการจัดเก็บข้อมูล เช่น สามารถจะกำหนดกฎในการตรวจสอบข้อมูล สามารถกำหนดความสัมพันธ์(Relation)ระหว่างกลุ่มของข้อมูลหรือที่เรียกว่าตาราง(Table) เพื่อให้สามารถตรวจสอบว่าข้อมูลมีความถูกต้องตรงกันอยู่เสมอหรือไม่ CREATE, ALTER, DROP PHP Programming
การจัดการกับข้อมูล ได้แก่ การทำงานกับข้อมูล เช่นการเรียกค้นข้อมูล(Select) การเพิ่ม (Insert), ปรับปรุง(Update), และลบข้อมูล(Delete) ฟิลด์ใดฟิลด์หนึ่ง หรือพร้อมกันหลายฟิลด์หลายเรคอร์ดได้ PHP Programming
การควบคุมข้อมูล ได้แก่การรักษาความปลอดภัยของข้อมูล เพื่อให้แน่ใจว่าผู้ที่จะอ่านหรือแก้ไขข้อมูลได้นั้น จะต้องเป็นผู้ที่ได้รับอนุญาตเท่านั้น และสามารถป้องกันไม่ให้มีการแก้ไขข้อมูลเดียวกันพร้อมๆกันได้ GRANT, REVOKE PHP Programming
ศัพท์เบื้องต้นของฐานข้อมูล Field Table Record PHP Programming
เอนติตี้(Entity)และแอตทริบิวต์(Attribute) เอนติตี้ หมายถึงบุคคล สิ่งของ เหตุการณ์หรืออะไรก็ได้ที่เราสนใจ ต้องการจะเก็บข้อมูล แอตทริบิวต์ คือคุณลักษณะหรือรายละเอียดของแต่ละเอนติตี้ โดยแต่ละเอนติตี้จะมีได้หลายแอตทริบิวต PHP Programming
ความสัมพันธ์(Relationship) เป็นสิ่งที่เชื่อมโยงระหว่างข้อมูลในตารางต่างๆเข้าด้วยกัน แบ่งได้เป็น 3 ลักษณะ ดังนี้ แบบหนึ่งต่อกลุ่ม(One-to-Many) แบบหนึ่งต่อหนึ่ง(One-to-One) แบบกลุ่มต่อกลุ่ม(Many –to-Many) PHP Programming
ความสัมพันธ์ (Relation) หมายถึงสิ่งที่เกี่ยวข้องกันของสิ่งของตั้งแต่สองสิ่ง คนกับบ้าน ความสัมพันธทาง Relational Database จะหมายถึง ตาราง 2 ตารางมีความสัมพันธ์กัน ซึ่งแบ่งเป็น 3 แบบ ดังนี้ One-To-One เช่น ความสัมพันธ์ระหว่างทะเบียนรถยนต์กับรถยนต์ มี รถยนต์ ทะเบียน PHP Programming
ความสัมพันธ์ (Relation) One-To-Many เช่นอาจารย์สอนนิสิต Many-To-Many เช่นนิสิต 1 คนเลือกเรียนหลายวิชาแต่ละวิชามีผู้นิสิตหลายคนลงทะเบียน, คำสั่งซื้อกับสินค้า สอน นิสิต อาจารย์ เลือกเรียน นิสิต วิชา PHP Programming
MySQL เป็น SQL Database Server ที่นิยมใช้งานกันบนระบบปฏิบัติการลีนุกซ์ MySQL นี้ได้ถูกพัฒนาโดย T.c.X. DataKonsultAB. โดยพัฒนาจนได้มาตราฐาน ISO/ANSI SQL 1992 ทำงาน แบบไคลเอนต์ / เซิร์ฟเวอร์ (client / server) จุดมุ่งหมายหลักของ MySQL คือความเร็ว ความคงทน และง่ายต่อการใช้ PHP Programming
การติดต่อกับ MySQL ผ่านโปรแกรมไคลเอนต์ที่ชื่อ mysql ซึ่งจะทำหน้าที่ในการติดต่อกับเซิร์ฟเวอร์ โดยจะต้องระบุการเชื่อมโยงผ่านพารามิเตอร์ ไปยังเซิร์ฟเวอร์ที่ต้องการติดต่อ โดยผ่านจากชื่อผู้ใช้และรหัสผ่าน รูปแบบการใช้งานคำสั่ง เป็นดังนี้ $ mysql [- h host_name] [- u user_name] [- pyour_pass] หรืออาจจะใช้รูปแบบอื่นที่สามารถใช้แทนของ '- h', '- u' และ '- p' options คือ '- - host = host_name', '- - user = user_name' และ '- - password = your_pass' PHP Programming
การติดต่อกับ MySQL MySQL ใช้ค่า default สำหรับการติดต่อกับพารามิเตอร์ที่หายไปจาก command line default host_name คือlocalhost และ default ชื่อผู้ใช้ เป็นชื่อที่ใช้ในการ login บน Unix (จะไม่มี password เช่น ถ้าไม่มี '- p' option) ดังนั้นสำหรับตัวอย่าง user ของ 'test' จะใช้คำสั่งดังนี้ $ mysql -h localhost -u test $ mysql -h localhost $ mysql -u test PHP Programming
การเพิ่มชื่อผู้ใช้เข้าไปในระบบฐานข้อมูล MySQL เริ่มแรกเมื่อติดตั้ง MySQL เสร็จจะมีชื่อผู้ใช้ root อยู่ในระบบแล้ว โดยผู้ใช้จำเป็นต้องตั้งรหัสผ่านก่อน ทั้งนี้เพื่อความปลอดภัยของระบบ ซึ่งจะสามารถใช้คำสั่งในการตั้งรหัสผ่าน หรือเปลี่ยนรหัสผ่านดังนี้ $ mysqladmin -u root password student จากคำสั่งนี้จะตั้งรหัสผ่านของผู้ใช้ root เป็น student PHP Programming
ปัญหาที่เกิด สำหรับการเพิ่มชื่อผู้ใช้เข้าไปในระบบ (Add user ) นั้น ในระบบของ MySQL นั้นจะเก็บข้อมูลที่เกี่ยวกับชื่อผู้ใช้ สิทธิการใช้งานต่างๆ ของ MySQL ไว้ในฐานข้อมูลชื่อ mysql โดยจะเก็บข้อมูลของผู้ใช้ไว้ในตารางข้อมูลชื่อ user ซึ่ง ตารางข้อมูลนี้จะมีฟิลด์ข้อมูลดังนี้ * Table name * ‘ user ’ * Scope fields * ‘ host ’ ‘ user ’ ‘ password ’ PHP Programming
* Privilege fields ‘ ‘ select_priv ’ ‘ insert_priv ’ ‘ update_priv ’ ‘ delete_priv ’ ‘ index_priv ’ ‘ alter_priv ’ ‘ create_priv ’ ‘ drop_priv ’ ‘ grant_priv ’ ‘reload_priv ’ ‘ shutdown_priv ’ ‘ process_priv ’ ‘ file_priv ’ PHP Programming
คำสั่งเพิ่มผู้ใช้ $ mysql –u root -p Password : mysql> INSERT INTO user VALUES('localhost','test',PASSWORD('student'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> INSERT INTO user VALUES('%','test',PASSWORD('password'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); mysql> FLUSH PRIVILEGES; PHP Programming
การติดต่อกับ mysql $ mysql –u root –ppassword php_book Welcome to MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 3.22.16agamma Type ‘help’ for help PHP Programming
การสร้าง ฐานข้อมูลและการเรียกใช้ ใช้คำสั่ง create database databaseName; ตัวอย่าง msql > create database php_book; การเปิดใช้งานฐานข้อมูล use databaseName; mysql > use php_book; PHP Programming
การสร้างตาราง คำสั่ง create table จะเป็นคำสั่งที่ใช้สำหรับตารางในระบบฐานข้อมูล ซึ่งจะต้องใส่ชื่อตาราง ชื่อคอลัมน์ (field) ชนิดของคอลัมน์โดยสามารถใส่ได้หลายคอลัมน์ รูปแบบคำสั่ง Create table table_name ( field1_name field1_data_type , field2_name field2_data_type ,… ); PHP Programming
ตัวอย่าง mysql > create table email_messages ( -> key_email_messages INTERGER -> ,date_created VARCHAR(19) -> ,date_updated VARCHAR(19) -> ,date_email VARCHAR(19) -> ,addr_from VARCHAR(100) -> ,addr_reply_to VARCHAR(100) -> ,subject VARCHAR(100) -> ,message MEDIUMTEXT -> ); PHP Programming
การสร้างตารางด้วย script สร้างscript ของ SQL เก็บลงแฟ้มชื่อ fname.sql ที่ linux prompt พิมคำสั่งดังนี้ cat fname.sql | mysql databasename -p เมื่อ -p หมายถึงให้ใส่ password PHP Programming
ตัวอย่างscript ชื่อ crea.sql CREATE TABLE publishers ( key_publishers INT(5) DEFAULT '0' NOT NULL AUTO_INCREMENT ,publisher_name VARCHAR(50) NOT NULL ,PRIMARY KEY (key_publishers) ) CREATE TABLE authors( key_authors INT(5) DEFAULT '0' NOT NULL AUTO_INCREMENT ,author_name VARCHAR(50) NOT NULL ,author_phone VARCHAR(20) NOT NULL ,PRIMARY KEY (key_authors) PHP Programming
key_books int(5) DEFAULT '0' NOT NULL AUTO_INCREMENT CREATE TABLE books ( key_books int(5) DEFAULT '0' NOT NULL AUTO_INCREMENT ,key_authors int(5) DEFAULT '0' NOT NULL ,key_publishers int(5) DEFAULT '0' NOT NULL ,book_title varchar(50) NOT NULL ,PRIMARY KEY (key_books) ); คำสั่งที่ใช้คือ cat crea.sql | mysql bookstore -p PHP Programming
คำสั่งแสดงโครงสร้างตาราง describe table_name; show columns from tablename from databasename show columns from databasename. tablename ตัวอย่าง mysql > describe email_message; PHP Programming
การแสดงสิทธิของผู้ใช้ ใช้คำสั่ง show grants for users; เช่น Mysql>show grants for seree; PHP Programming
การแสดง database & Table show database ; การแสดง table ใช้คำสั่ง show tables ; PHP Programming
The SQL Alter Table Statement alter table table_name add column field_name field_data_type ; alter table table_name change column existing_field_name new_field_name new_field_data_type ; alter table table_name drop column existing_field_name PHP Programming
Using Add Column Option แสดงการใช้คำสั่ง alter table เพิ่มฟิลดชื่อ temp_field ลงในตาราง email_message ใช้คำสั่งดังนี้ mysql > use php_book; mysql > alter table email_messages add column -> temp_field -> integer; mysql > describe email_messages; PHP Programming
Using Change Column Option mysql > use php_book; Database changed mysql > alter table email_messages change column temp_field -> temp_field -> varchar(25); เรียกดูโครงสร้าง mysql > describe email_messages; PHP Programming
Using Drop Column Option การลบคอลัมน์ออกจากตารางสามารถทำได้ โดยใช้คำสั่ง alter table ดังนี้ mysql > use php_book; mysql > alter table email_messages drop column -> temp_field; PHP Programming
The SQL Drop Table Statement การลบตารางออกจากฐานข้อมูลจะง่ายกว่าการลบคอลัมน์โดยกำหนดชื่อตารางที่จะลบ โดยใช้คำสั่งดังนี้ mysql > use php_book; mysql > drop table email_messages; PHP Programming
The SQL Insert Statement insert into table_name ( column_list ) values ( value_list ) สตริงก์ที่ใช้ในคำสั่ง insert จะต้องปิดล้อมด้วยเครื่องหมาย single quote และจำนวนของค่าใน value_list จะต้องเท่ากับจำนวนคอลัมน์ใน column_list PHP Programming
ตัวอย่าง ให้พิมพ์คำสั่งเพิ่มข้อมูลดังต่อไปนี้ mysql > create table test ( -> a integer ,b VARCHAR(10) -> ); mysql > insert into test -> (a, b) -> values -> ( 134, ‘aaa’ ); PHP Programming
The SQL Update Statement update { table_name } set { column_name } = { expression }… where { where_clause } PHP Programming
ตัวอย่าง mysql> create table test (a integer); mysql> insert into test (a) values (134); mysql> insert into test (a) values (100); mysql> select * from test; mysql> update test set a = a+1; Query OK, 2 rows affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 PHP Programming
ตัวอย่าง update employees set salary = salary * 1.15; เราสามารถใช้คำสั่ง update กับอนุประโยค where ได้ดังนี้ update employees set salaary = salary * 1.15 where last_name = ‘medinets’ ; นอกจากนี้ยังสามารถใช้ร่วมกับฟังก์ชันอื่นๆได้อีกเช่น update employees set last_name = upper(last_name); PHP Programming
The SQL Select Statement คำสั่ง select จะใช้สำหรับการแสดงคอลัมน์ (field) หรือกลุ่มของคอลัมน์ที่เราต้องการดูข้อมูล รูปแบบการใช้งานคือ select field_list from table_list from table_list where where_clause <------ filters group by column_list <----- aggregates order by column_list <------ sorts having having_cluase <------ filters after aggregation PHP Programming
The Field List คำสั่ง select ที่ง่ายที่สุดคือ SELECT * FROM Table_name ; คำสั่งจะแสดงทุกฟิลด์ของเรคอร์ดที่อยู่ในตาราง ถ้าต้องการแสดงข้อมูลเฉพาะจะต้องระบุฟิลด์ด้วยดังตัวอย่าง SELECT str_name_first , int_age FROM Select01; PHP Programming
The Where Clause อนุประโยค where ใช้แสดงข้อมูลแบบมีเงื่อนไข ดังเช่น SELECTstr_name_first, int_age FROM select01 WHERE UPPER(str_name_first) LIKE ‘F%’ ; SELECT str_name_first, int_age FROM select01 WHERE UPPER(str_name_first) LIKE ‘F%’ OR UPPER(str_name_first) LIKE ‘G%’ ; PHP Programming
The Order By Clause อนุประโยค Order by ใช้สำหรับแสดงผลลัพธ์โดยการจัดเรียงข้อมูล ดังตัวอย่างเป็นการจัดเรียงชื่อจากน้อยไปมาก SELECT str_name_first, int_age FROM select01 ORDER BY str_name_first; หากต้องการเรียกจากมากไปน้อยจะต้องระบุด้วยคำว่า DESC ดังนี้ SELECT str_name_first, int_age FROM select01 ORDER BY Str_name_first DESC; PHP Programming
The Group By Clause ตัวอย่างการใช้ group by SELECT str_name_first ,count(*) FROM select01 GROUP BY str_name_first; เราสามารถหาค่าสูงสุดของอายุ SELECT str_name_first ,MAX(int_age) AS OLDEST_PERSON FROM select01 GROUP BY str_name_first ; PHP Programming
The Having Clause อนุประโยค HAVING จะใช้ร่วมกับอนุประโยค group by เสมอ เพื่อต้องการให้แสดงข้อมูลที่ได้ผ่านการจัดกลุ่มโดย GROUP BY เพียงบางส่วนตามเงื่อนไข เช่น SELECT str_name_first,MAX(int_age)AS OLDEST_PERSON FROM select01 GROUP BY str_name_first HAVING OLDEST_PERSON > 65; SELECT str_name_first, MAX(int_age) AS OLDEST_PERSON FROM select01 WHERE int_age > 65 GROUP BY str_name_first ; PHP Programming
The SQL Delete Statement DELETE FROM {table_name} WHERE {where_clause} ; คำสั่ง delete เป็นคำสั่งที่สำคัญ ต้องใช้อย่างระวัง เรคอร์ดที่ลงลบออกแล้วจะเรียกคืนไม่ได้ ดังตัวอย่าง DELETE FROM select01 WHERE UPPER(str_name_first) = ‘Charles’; หรือ SELECT COUNT(*) FROM select01 PHP Programming