570 likes | 693 Views
MySQL. ความรู้เบื้องต้นเกี่ยวกับ MySQL. อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com ม. ราชภัฎพระนคร. ฐานข้อมูลคืออะไร?.
E N D
MySQL ความรู้เบื้องต้นเกี่ยวกับ MySQL อ. นัฐพงศ์ ส่งเนียม http://www.siam2dev.com ม. ราชภัฎพระนคร
ฐานข้อมูลคืออะไร? • ฐานข้อมูล(Database) คือ กลุ่มของข้อมูลแบบต่างๆที่รวบรวมไว้ และนำมาจัดเรียงให้เป็นระบบเพื่อใช้ตามวัตถุประสงค์ที่ต้องการ เช่น สมุดรายชื่อผู้ใช้โทรศัพท์ ทะเบียนรายชื่อนักศึกษา เป็นต้น
คุณสมบัติฐานข้อมูล • การนำข้อมูลที่สัมพันธ์กันทั้งหมดมาไว้รวมกัน • ข้อมูลที่มีลักษณะเป็นมาตรฐาน • มีชุดเดียว • ใช้ได้ทั้งหน่วยงาน • มีระบบตรวจสอบป้องกัน • เป็นอิสระจากโปรแกรม • มีภาษาสอบถาม (QUERY LANGUAGE) • ต้องมีระบบจัดการฐานข้อมูล (DATABASE MANAGEMENT SYSTEM)
ข้อดีของฐานข้อมูล • ลดความซ้ำซ้อนของข้อมูล • ใช้ข้อมูลร่วมกันได้ • มีระบบจัดการความปลอดภัยของข้อมูล • หลีกเลี่ยงความขัดแย้งของข้อมูล
ระบบจัดการฐานข้อมูล(DBMS)ระบบจัดการฐานข้อมูล(DBMS) • นิยมเรียกว่า ดีบีเอ็มเอส(DBMS) • คือชุดของโปรแกรมคอมพิวเตอร์ซึ่งทำหน้าที่สร้าง ดูแลรักษา และใช้งานส่วนต่าง ๆของฐานข้อมูล
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
ระบบจัดการฐานข้อมูล(DBMS)ระบบจัดการฐานข้อมูล(DBMS) • ต้องมีการใช้งานทรัพยากรของคอมพิวเตอร์อย่างมีประสิทธิภาพ • ทำหน้าที่ติดต่อกับตัวจัดการระบบไฟล์ • การควบคุมการคงสภาพ • การควบคุมระบบความปลอดภัย • การสร้างระบบสำรองและการฟื้นสภาพ • การควบคุมภาวะพร้อมกัน
แบบจำลองข้อมูล(Data Modelling) มี 3 แบบ • ฐานข้อมูลแบบลำดับขั้น (Hierarchical Database Model) • ฐานข้อมูลแบบข่ายงาน (Network Database Model) • ฐานข้อมูลแบบตาราง (Relational Database Model)
แบบลำดับขั้น (Hierarchyical Database) • เป็นการแสดงความสัมพันธ์ของเอนติตี้ในแบบลำดับขั้น ซึ่งเริ่มจากเอนติตี้หลักแล้วย่อยลงไปเป็นเอนติตี้ต่างๆตามลำดับ เป็นความสัมพันธ์แบบพ่อกับลูก คณะ 1 1 N N N อาจารย์ นิสิต ห้อง lab N N วิชา
แบบข่ายงาน (Network Database) • เป็นการแสดงความสัมพันธ์ของเอนติตี้ในแบบที่เอนติตี้มีความสัมพันธ์กับเอนติตี้อื่นๆได้หลายเอนติตี้ โครงการ คณะ 1 1 N N N N N อาจารย์ นิสิต ห้อง lab
ฐานข้อมูลเชิงสัมพันธ์(Relational Database) • การจัดเก็บข้อมูลจะอยู่ในรูปของตาราง มีคอลัมน์ และแถว ในแต่ละตารางจะเก็บข้อมูลเกี่ยวกับเรื่องใดเรื่องหนึ่ง โดยข้อมูลในตารางหนึ่งอาจมีความสัมพันธ์กับตารางอื่นๆได้ • เช่นตารางที่เก็บข้อมูลการขาย กับตารางที่เก็บข้อมูลลูกค้า และตารางที่เก็บข้อมูลสินค้า เมื่อต้องการพิมพ์ใบสั่งซื้อ จะเห็นว่ามีข้อมูลจากทั้งสามตาราง คือ มีรายการขาย ชื่อ ที่อยู่ลูกค้า ชื่อ ราคาสินค้า ปริมาณการสั่งซื้อ ทั้งนี้ต้องมีการกำหนดความสัมพันธ์ระหว่างตารางต่างๆไว้ก่อน
ฐานข้อมูลเชิงสัมพันธ์ฐานข้อมูลเชิงสัมพันธ์ • เก็บข้อมูลในรูปตาราง กลุ่มของข้อมูลที่จัดมีความสัมพันธ์กันในรูปแนวนอนและแนวตั้ง ซึ่งเรียกข้อมูลที่เรียงกันในรูปแนวนอนว่า เรคอร์ด(record) และจะเรียกข้อมูลที่วางในแนวตั้งว่า เขตข้อมูล(Field)
ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ • หรือที่เรียกว่า RDBMS(Relational DataBase System) เป็นเครื่องมือในการจัดเก็บข้อมูล เพื่อให้ค้นหาข้อมูลแบบต่างๆได้ตามต้องการ นอกจากนี้ยังช่วยในการดูแลรักษาข้อมูล เช่นการแก้ไข เพิ่ม ลบข้อมูล ตลอดจนการออกรายงานได้ง่ายขึ้นความสามารถของระบบจัดการฐานข้อมูลมี 3 ประการคือ • การกำหนดนิยามข้อมูล(Data Definition) • การจัดการกับข้อมูล(Data Manipulation) • การควบคุมข้อมูล(Data Control)
การกำหนดนิยามข้อมูล • ได้แก่การกำหนดโครงสร้างของข้อมูลที่เก็บในฐานข้อมูล การกำหนดชนิดของข้อมูลและลักษณะการจัดเก็บข้อมูล เช่น • สามารถจะกำหนดกฎในการตรวจสอบข้อมูล • สามารถกำหนดความสัมพันธ์(Relation)ระหว่างกลุ่มของข้อมูลหรือที่เรียกว่าตาราง(Table) เพื่อให้สามารถตรวจสอบว่าข้อมูลมีความถูกต้องตรงกันอยู่เสมอหรือไม่ • CREATE, ALTER, DROP
การจัดการกับข้อมูล • ได้แก่การทำงานกับข้อมูล เช่นการเรียกค้นข้อมูล(Select) การเพิ่ม (Insert), ปรับปรุง(Update), และลบข้อมูล(Delete) ฟิลด์ใดฟิลด์หนึ่ง หรือพร้อมกันหลายฟิลด์หลายเรคอร์ดได้
การควบคุมข้อมูล • ได้แก่การรักษาความปลอดภัยของข้อมูล เพื่อให้แน่ใจว่าผู้ที่จะอ่านหรือแก้ไขข้อมูลได้นั้น จะต้องเป็นผู้ที่ได้รับอนุญาตเท่านั้น และสามารถป้องกันไม่ให้มีการแก้ไขข้อมูลเดียวกันพร้อมๆกันได้ • GRANT, REVOKE
ศัพท์เบื้องต้นของฐานข้อมูลศัพท์เบื้องต้นของฐานข้อมูล Field Table Record
เอนติตี้(Entity)และแอตทริบิวต์(Attribute) • เอนติตี้ หมายถึงบุคคล สิ่งของ เหตุการณ์หรืออะไรก็ได้ที่เราสนใจ ต้องการจะเก็บข้อมูล • แอตทริบิวต์ คือคุณลักษณะหรือรายละเอียดของแต่ละเอนติตี้ โดยแต่ละเอนติตี้จะมีได้หลายแอตทริบิวต
ความสัมพันธ์(Relationship) • เป็นสิ่งที่เชื่อมโยงระหว่างข้อมูลในตารางต่างๆเข้าด้วยกัน แบ่งได้เป็น 3 ลักษณะ ดังนี้ • แบบหนึ่งต่อกลุ่ม(One-to-Many) • แบบหนึ่งต่อหนึ่ง(One-to-One) • แบบกลุ่มต่อกลุ่ม(Many –to-Many)
ความสัมพันธ์ (Relation) • หมายถึงสิ่งที่เกี่ยวข้องกันของสิ่งของตั้งแต่สองสิ่ง • คนกับบ้าน • ความสัมพันธทาง Relational Database จะหมายถึง ตาราง 2 ตารางมีความสัมพันธ์กัน ซึ่งแบ่งเป็น 3 แบบ ดังนี้ • One-To-One เช่น ความสัมพันธ์ระหว่างทะเบียนรถยนต์กับรถยนต์ มี รถยนต์ ทะเบียน
ความสัมพันธ์ (Relation) • One-To-Many เช่นอาจารย์สอนนิสิต • Many-To-Many เช่นนิสิต 1 คนเลือกเรียนหลายวิชาแต่ละวิชามีผู้นิสิตหลายคนลงทะเบียน, คำสั่งซื้อกับสินค้า สอน นิสิต อาจารย์ เลือกเรียน นิสิต วิชา
MySQL • เป็น SQLDatabase Server ที่นิยมใช้งานกันบนระบบปฏิบัติการ ลีนุกซ์ • MySQL นี้ได้ถูกพัฒนาโดย T.c.X. DataKonsultAB. โดยพัฒนาจนได้มาตราฐาน ISO/ANSI SQL 1992 • ทำงาน แบบไคลเอนต์ / เซิร์ฟเวอร์ (client / server) • จุดมุ่งหมายหลักของ MySQL คือความเร็ว ความคงทน และง่ายต่อการใช้
การติดต่อกับMySQL • ผ่านโปรแกรมไคลเอนต์ที่ชื่อ mysql ซึ่งจะทำหน้าที่ในการติดต่อกับเซิร์ฟเวอร์ โดยจะต้องระบุการเชื่อมโยงผ่านพารามิเตอร์ ไปยังเซิร์ฟเวอร์ที่ต้องการติดต่อ โดยผ่านจากชื่อผู้ใช้และรหัสผ่าน รูปแบบการใช้งานคำสั่ง เป็นดังนี้ • $ mysql [- h host_name] [- u user_name] [- pyour_pass] • หรืออาจจะใช้รูปแบบอื่นที่สามารถใช้แทนของ '- h', '- u' และ '- p' options คือ • '- - host = host_name', '- - user = user_name' และ '- - password = your_pass'
การติดต่อกับMySQL • MySQL ใช้ค่า default สำหรับการติดต่อกับพารามิเตอร์ที่หายไปจาก command line defaulthost_name คือlocalhost และ default ชื่อผู้ใช้ เป็นชื่อที่ใช้ในการ login บน Unix (จะไม่มี password เช่น ถ้าไม่มี '- p' option) • ดังนั้นสำหรับตัวอย่าง user ของ 'test' จะใช้คำสั่งดังนี้ $ mysql -h localhost -u test $ mysql -h localhost $ mysql -u test
การเพิ่มชื่อผู้ใช้เข้าไปในระบบฐานข้อมูล MySQL • เริ่มแรกเมื่อติดตั้ง MySQL เสร็จจะมีชื่อผู้ใช้ root อยู่ในระบบแล้ว โดยผู้ใช้จำเป็นต้องตั้งรหัสผ่านก่อน ทั้งนี้เพื่อความปลอดภัยของระบบ ซึ่งจะสามารถใช้คำสั่งในการตั้งรหัสผ่าน หรือเปลี่ยนรหัสผ่านดังนี้ $ mysqladmin -u root password student • จากคำสั่งนี้จะตั้งรหัสผ่านของผู้ใช้ root เป็น student
ปัญหาที่เกิด • สำหรับการเพิ่มชื่อผู้ใช้เข้าไปในระบบ (Add user ) นั้น ในระบบของ MySQL นั้นจะเก็บข้อมูลที่เกี่ยวกับชื่อผู้ใช้ สิทธิการใช้งานต่างๆ ของ MySQL ไว้ในฐานข้อมูลชื่อ mysql โดยจะเก็บข้อมูลของผู้ใช้ไว้ในตารางข้อมูลชื่อ user ซึ่ง ตารางข้อมูลนี้จะมีฟิลด์ข้อมูลดังนี้ • * Table name * ‘ user ’ • * Scope fields * ‘ host ’ ‘ user ’ ‘ password ’
* 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 ’
คำสั่งเพิ่มผู้ใช้ $ mysql –uroot -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;
การติดต่อกับ 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
การสร้าง ฐานข้อมูลและการเรียกใช้ ใช้คำสั่ง msql > create database dataName; • ตัวอย่าง msql > create database php_book; • การเปิดใช้งานฐานข้อมูล mysql > use ฐานข้อมูล; • ตัวอย่าง mysql > use php_book;
The SQL Create Table Statement • คำสั่ง create table จะเป็นคำสั่งที่ใช้สำหรับตารางในระบบฐานข้อมูล ซึ่งจะต้องใส่ชื่อตาราง ชื่อคอลัมน์ (field) ชนิดของคอลัมน์โดยสามารถใส่ได้หลายคอลัมน์ • รูปแบบคำสั่ง Create table { table_name } ( { fieldl_name } { field1_data_type } , { field2_name } { field2_data_type } );
ตัวอย่าง • 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 -> );
การสร้างตารางด้วย script • สร้างscript ของ SQL เก็บลงแฟ้มชื่อ fname.sql • ที่ linux prompt พิมคำสั่งดังนี้ cat fname.sql | mysql database name -p เมื่อ -p หมายถึงให้ใส่ password
ตัวอย่าง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) ) 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
คำสั่งแสดงโครงสร้างตารางคำสั่งแสดงโครงสร้างตาราง • mysql > describe table_name; • ตัวอย่าง mysql > describe email_message;
การแสดง database & Table • การแสดง database ใช้คำสั่ง show database ; • การแสดง table ใช้คำสั่ง show tables ;
The SQL Alter Table Statement • คำสั่ง alter table ใช้สำหรับเพิ่มเติม หรือเปลี่ยนแปลงคอลัมน์ในตาราง รูปแบบ มีดังนี้ • 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}
Using Add Column Option • แสดงการใช้คำสั่ง alter table เพิ่มฟิลดชื่อ temp_field ลงในตาราง email_message ใช้คำสั่งดังนี้ mysql > use php_book; Database changed mysql > alter table email_messages add column -> temp_field -> integer; mysql > describe email_messages;
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;
Using Drop Column Option • การลบคอลัมน์ออกจากตารางสามารถทำได้ โดยใช้คำสั่ง alter table ดังนี้ mysql > use php_book; Database changed mysql > alter table email_messages drop column -> temp_field;
The SQL Drop Table Statement • การลบตารางออกจากฐานข้อมูลจะง่ายกว่าการลบคอลัมน์โดยกำหนดชื่อตารางที่จะลบ โดยใช้คำสั่งดังนี้ mysql > use php_book; Database changed mysql > drop table email_messages;
The SQL Insert Statement • คำสั่ง insert ใช้สำหรับเพิ่มเรคอร์ดลงในตาราง มีรูปแบบคำสั่งดังนี้ insert into { table_name } ( { column_list } ) values ( { value_list } ) • สตริงก์ที่ใช้ในคำสั่ง insert จะต้องปิดล้อมด้วยเครื่องหมาย single quoteและจำนวนของค่าใน value_list จะต้องเท่ากับจำนวนคอลัมน์ใน column_list
ตัวอย่าง • ให้พิมพ์คำสั่งเพิ่มข้อมูลดังต่อไปนี้ mysql > create table test ( -> a integer ,b VARCHAR(10) -> ); mysql > insert into test -> (a, b) -> values -> ( 134, ‘aaa’ );
The SQL Update Statement • คำสั่ง update เป็นคำสั่งใช้สำหรับเปลี่ยนแปลงสารสนเทศในตาราง มีรูปแบบคำสั่งดังนี้ update { table_name } set { column_name } = { expression }… where { where_clause } • คำสั่ง update ที่ใช้กันมากคือเพิ่มฟิลด์ในเรคอร์ด
ตัวอย่าง 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 mysql> select * from test;
ตัวอย่าง • 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);
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
The Field List • คำสั่ง select ที่ง่ายที่สุดคือ SELECT *FROM Table_name ; • คำสั่งจะแสดงทุกฟิลด์ของเรคอร์ดที่อยู่ในตาราง ถ้าต้องการแสดงข้อมูลเฉพาะจะต้องระบุฟิลด์ด้วยดังตัวอย่าง • SELECT str_name_first ,int_ageFROM Select01;
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 WHEREUPPER(str_name_first) LIKE ‘F%’ OR UPPER(str_name_first) LIKE ‘G%’ ;