How to create innodb table in MySQL

หลังจากทำการติดตั้ง InnoDB Engine เรียบร้อยแล้ว ก็มาลองดูการสร้างตารางที่มี Type เป็น InnoDB กันบ้างนะคะ

ตัวอย่างการสร้างตารางแบบ InnoDB

1.  เข้า http://localhost/phpMyAdmin/

2. สร้างฐานข้อมูล โดยในส่วนของ Create new database ให้ใส่ ชื่อฐานข้อมูล และรูปแบบ (ในที่นี้ใส่ test เป็นชื่อฐานข้อมูล และเลือก รูปแบบ utf8_unicode_ci) จากนั้นกด Create

InnoDB_1.jpg

3. เลือกแทบ SQL เพื่อเตรียมที่จะใส่คำสั่ง SQL ในการสร้างตาราง

InnoDB_2.jpg

4. ทดสอบโดยทำการ copy โค้ดด้านล่างไปวางแล้วกด Go

CREATE TABLE `profiles` (
`id` int(11) NOT NULL auto_increment,
`content` mediumtext NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`profile_id` int(11) default NULL,
PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ที่มาของ code  : http://www.ryebreaddesign.com/articles/posts/view/7

5. ทำการ insert ข้อมูล โดยการนำโค้ดด้านล่างไปวางในส่วน SQL จากนั้นกด Go

INSERT INTO `users` (`id` ,`name` ,`profile_id`)
VALUES (NULL , ‘John Doe’, ‘7’);

INSERT INTO `profiles` (`id` ,`content`)
VALUES (‘7’, ‘John Doe is from Seattle and is 36 years old. ‘);

InnoDB_3.jpg

6. เปิด Structure ของ users แล้วเลือกปุ่ม index (ปุ่มที่เป็นรูปสายฟ้า)

InnoDB_4.jpg

7. จากนั้นเลือก Relation view

InnoDB_5.jpg

8. เลือกการเชื่อมโยงและข้อกำหนด (ในที่นี้เลือก profiles->id , ON DELETE CASCADE, ON UPDATE  CASCADE ) จากนั้นกด SAVE

InnoDB_6_1.jpg

โดย  CASCADE คือ การกระทําแบบต่อเนื่อง , RESTRICT คือ การกระทําแบบมีข้อจํากัด ,
SET NULL คือ การกระทําโดยการใส่ค่าว่าง , NO ACTION คือ ไม่ต้องกระทำใดๆเลย

9. ลองใส่ข้อมูลเข้าไปอีกเพื่อที่จะได้เห็นภาพชัดเจนมากยิ่งขึ้น

INSERT INTO `test`.`users` (`id`, `name`, `profile_id`)
VALUES (‘3’, ‘Nongoffna’, ‘5’), (‘4’, ‘DonJai’, ‘6’);

INSERT INTO `test`.`profiles` (`id`, `content`)
VALUES (‘5’, ‘My name is Nongoffna.’), (‘6’, ‘Don-jai.com is my blog’);

InnoDB_7.jpg InnoDB_8.jpg

10. ทำการทดสอบการเชื่อมโยงโดยการลบ  John Doe ในส่วนของ Profile (กด กากบาทสีแดงในรูปซ้ายมือ) จะได้ผลดังนี้

InnoDB_10.jpg InnoDB_9.jpg

11. จากผลจะได้ว่า user ของ John Doe ในตาราง user จะถูกลบไปด้วยเนื่องจากการกำหนดรูปแบบการเชื่อมโยงแบบ CASCADE ซึ่งเราเลือกการเชื่อมโยง profiles->id (ถ้าหากทำการลบ John Doe ในฝั่งของ user ข้อมูลในฝั่งของ profile จะไม่ถูกลบไปด้วย)

อ้างอิง

http://www.ryebreaddesign.com/articles/posts/view/7

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

http://www.mysqlfaqs.net/mysql/Table-Types-or-Storage-Engines/InnoDB-Engine

Leave a comment