🗄️ MySQL/MariaDB

วิธีใช้คำสั่ง INSERT ใน MySQL และ MariaDB สำหรับมือใหม่ให้โปรเร็วขึ้น

10 นาที 19 views บันทึกเป็น PDF
วิธีใช้คำสั่ง INSERT ใน MySQL และ MariaDB สำหรับมือใหม่ให้โปรเร็วขึ้น

เรียนรู้วิธีเพิ่มข้อมูลลงฐานข้อมูลด้วยคำสั่ง INSERT INTO, เทคนิค Bulk Insert เพิ่มข้อมูลทีละหลายแถวให้ไวขึ้น พร้อมวิธีจัดการข้อมูลซ้ำด้วย INSERT IGNORE และ REPLACE

การเพิ่มข้อมูลลงตารางด้วยคำสั่ง INSERT INTO

การเพิ่มข้อมูลลงในฐานข้อมูลเปรียบเสมือนการจดบันทึกรายชื่อลงในสมุดบัญชีรายรับรายจ่าย เมื่อเราต้องการเก็บข้อมูลใหม่ เราต้องใช้คำสั่ง INSERT INTO (คำสั่งเพิ่มข้อมูล) เพื่อบอกระบบว่าเราต้องการเอาข้อมูลไปใส่ไว้ที่ตารางไหนและคอลัมน์ใดบ้าง หากเปรียบเทียบกับการทำงานโปรแกรมเมอร์ นี่คือขั้นตอนพื้นฐานที่สุดในการสร้างข้อมูลใหม่ในระบบ

ก่อนจะเริ่มเขียนโค้ด คุณต้องมีตารางที่สร้างไว้แล้วใน Database (ฐานข้อมูลหรือที่เก็บข้อมูลแบบดิจิทัล) ของคุณ หากเรามีตารางชื่อ users ที่เก็บชื่อและอายุ เราต้องระบุให้ชัดเจนว่าข้อมูลแต่ละก้อนจะไปอยู่ในช่องไหน การทำแบบนี้ช่วยป้องกันความผิดพลาดที่อาจเกิดขึ้นเมื่อโครงสร้างตารางมีการเปลี่ยนแปลงในอนาคต

การเขียนคำสั่งนี้ต้องระวังเรื่องลำดับของชื่อคอลัมน์และค่าข้อมูลที่ใส่เข้าไปให้ตรงกัน หากคุณใส่ข้อมูลสลับตำแหน่งกัน ข้อมูลในฐานข้อมูลของคุณจะผิดเพี้ยนไปหมดทันที มือใหม่มักพลาดตรงนี้บ่อยครั้ง ดังนั้นให้ตรวจสอบชื่อคอลัมน์ทุกครั้งก่อนกดรันคำสั่งครับ

-- เพิ่มข้อมูลผู้ใช้งานหนึ่งคนลงในตาราง users
INSERT INTO users (name, age) 
VALUES ('Somchai', 25);

ส่วนประกอบของคำสั่งนี้คือ INSERT INTO ตามด้วยชื่อตาราง users และระบุคอลัมน์ในวงเล็บ (name, age) ส่วน VALUES คือค่าที่จะใส่ลงไปตามลำดับคอลัมน์ที่ระบุไว้ข้างต้น

ผลลัพธ์ที่ได้คือ ตาราง users จะมีแถวใหม่เพิ่มขึ้นมาหนึ่งแถว โดยคอลัมน์ name มีค่าเป็น 'Somchai' และ age มีค่าเป็น 25 หากเปิดดูด้วยคำสั่ง SELECT * FROM users คุณจะเห็นข้อมูลนี้ปรากฏอยู่

เทคนิค Bulk Insert เพิ่มข้อมูลทีละหลายแถว

ในชีวิตการทำงานจริง คุณมักไม่ได้เพิ่มข้อมูลแค่ทีละรายการ แต่บางครั้งต้องย้ายข้อมูลจำนวนมากเข้าสู่ระบบ การใช้คำสั่ง Bulk Insert (การนำเข้าข้อมูลทีละหลายแถวในคำสั่งเดียว) จะช่วยให้งานเสร็จเร็วขึ้นมาก เพราะลดจำนวนครั้งที่ต้องติดต่อกับฐานข้อมูลลง

ลองจินตนาการว่าคุณต้องขนของเข้าบ้าน แทนที่จะเดินไปหยิบของทีละชิ้น การใช้รถเข็นขนของไปทีเดียวหลายชิ้นย่อมเร็วกว่ามาก การเขียนคำสั่งฐานข้อมูลก็เช่นกัน ยิ่งเราส่งคำสั่งไปน้อยครั้งเท่าไหร่ ฐานข้อมูลก็ยิ่งทำงานได้เบาแรงและรวดเร็วมากขึ้นเท่านั้น

ข้อควรระวังคือจำนวนข้อมูลที่ใส่ในคำสั่งเดียวต้องไม่มากเกินขีดจำกัดที่ฐานข้อมูลกำหนดไว้ หากข้อมูลเยอะเกินไปอาจทำให้เกิด Timeout (การตัดการเชื่อมต่อเพราะรอนานเกินไป) ได้ ดังนั้นในงานระดับองค์กร เรามักจะแบ่งก้อนข้อมูลเป็นชุดๆ ละประมาณ 500 ถึง 1,000 แถวเพื่อให้ระบบทำงานได้เสถียร

-- เพิ่มข้อมูลผู้ใช้งานหลายคนพร้อมกันในครั้งเดียว
INSERT INTO users (name, age) 
VALUES 
('Somchai', 25),
('Somsri', 22),
('Anan', 30);

ในโค้ดนี้เราใช้ INSERT INTO เหมือนเดิม แต่ตรงส่วน VALUES เราใช้เครื่องหมายจุลภาคคั่นระหว่างชุดข้อมูลแต่ละชุด ทำให้เราเพิ่มข้อมูลได้พร้อมกันหลายแถวภายในคำสั่งเดียว

ผลลัพธ์คือฐานข้อมูลจะสร้างแถวใหม่ขึ้นมา 3 แถวในตาราง users ทันที วิธีนี้ประหยัดเวลาการประมวลผลของฐานข้อมูลได้ดีกว่าการเขียนคำสั่ง INSERT แยกกัน 3 รอบอย่างชัดเจน

การใช้ INSERT IGNORE เพื่อข้ามข้อมูลซ้ำ

บางครั้งคุณอาจพยายามเพิ่มข้อมูลที่มี Primary Key (รหัสประจำตัวของข้อมูลที่ไม่ซ้ำกันเลย) ไปซ้ำกับข้อมูลที่มีอยู่แล้ว ปกติฐานข้อมูลจะแจ้งเตือน Error (ข้อผิดพลาด) ทำให้การทำงานหยุดชะงัก การใช้ INSERT IGNORE จะเข้ามาช่วยแก้ปัญหานี้โดยการบอกฐานข้อมูลว่าถ้าเจอข้อมูลซ้ำ ให้ข้ามไปได้เลย

เรื่องนี้สำคัญมากเวลาคุณเขียนโปรแกรมจัดการข้อมูลที่นำเข้ามาจากไฟล์ภายนอก เช่น ไฟล์ Excel หรือ CSV (ไฟล์ตารางที่คั่นด้วยเครื่องหมายจุลภาค) บ่อยครั้งที่ข้อมูลเหล่านั้นมีรายการที่ซ้ำกับของเดิมในฐานข้อมูลอยู่แล้ว การสั่งให้มันข้ามข้อมูลที่ซ้ำไปจะช่วยให้โปรแกรมของคุณทำงานต่อได้จนจบโดยไม่สะดุด

อย่างไรก็ตาม ต้องใช้คำสั่งนี้ด้วยความระมัดระวัง เพราะคุณจะไม่รู้เลยว่าข้อมูลแถวไหนที่ถูกข้ามไปบ้าง หากต้องการตรวจสอบว่าข้อมูลไหนซ้ำ คุณอาจต้องเขียนคำสั่งตรวจสอบแยกต่างหากในภายหลัง เพื่อป้องกันไม่ให้ข้อมูลสำคัญหายไปโดยไม่ตั้งใจ

-- เพิ่มข้อมูลโดยข้ามรายการที่รหัสซ้ำ
INSERT IGNORE INTO users (id, name, age) 
VALUES (1, 'Somchai', 25);

คำสั่ง INSERT IGNORE จะตรวจสอบค่า id หากพบว่าในตารางมี id เท่ากับ 1 อยู่แล้ว ฐานข้อมูลจะเพิกเฉยต่อคำสั่งนี้และไม่บันทึกข้อมูลใหม่ลงไป

ผลลัพธ์คือหากมี id=1 อยู่แล้ว จะไม่มีการเปลี่ยนแปลงใดๆ เกิดขึ้น แต่ถ้าไม่มี id=1 ข้อมูลจะถูกบันทึกตามปกติ ระบบจะไม่แจ้งเตือนข้อผิดพลาดรุนแรงออกมา ทำให้โปรแกรมทำงานต่อไปได้

การใช้ REPLACE INTO เพื่อแทนที่ข้อมูลเดิม

หากคุณไม่ต้องการข้ามข้อมูลที่ซ้ำ แต่ต้องการแก้ไขข้อมูลเดิมให้เป็นข้อมูลใหม่ล่าสุดแทน คุณควรใช้ REPLACE INTO คำสั่งนี้เปรียบเสมือนการลบข้อมูลเก่าทิ้งแล้วใส่ข้อมูลใหม่ลงไปแทนที่ในจังหวะเดียว ซึ่งสะดวกมากสำหรับการอัปเดตข้อมูลสถานะของผู้ใช้งาน

สถานการณ์ที่เหมาะกับคำสั่งนี้คือ การอัปเดตข้อมูลสินค้าในสต็อก สมมติว่ารหัสสินค้าเดิมถูกส่งเข้ามาใหม่พร้อมรายละเอียดราคาที่เปลี่ยนไป การใช้ REPLACE INTO จะช่วยให้มั่นใจได้ว่าข้อมูลล่าสุดจะถูกเก็บไว้เสมอ โดยที่คุณไม่ต้องเขียนคำสั่ง DELETE (ลบข้อมูล) และ INSERT (เพิ่มข้อมูล) แยกกัน

ข้อควรระวังคือ คำสั่งนี้จะทำการลบข้อมูลเดิมออกก่อนแล้วค่อยเพิ่มใหม่ ซึ่งอาจส่งผลกระทบต่อ Index (ดัชนีที่ช่วยให้ค้นหาข้อมูลเร็วขึ้น) หรือข้อมูลอื่นที่เชื่อมโยงกันอยู่ หากคุณไม่ได้ออกแบบฐานข้อมูลมาให้รองรับการลบและเพิ่มใหม่บ่อยๆ อาจทำให้เลข Auto Increment (เลขที่รันอัตโนมัติ) เปลี่ยนไปได้

-- แทนที่ข้อมูลเดิมที่มีรหัสเดียวกันด้วยข้อมูลใหม่
REPLACE INTO users (id, name, age) 
VALUES (1, 'Somchai', 28);

คำสั่งนี้จะค้นหาแถวที่มี id=1 หากพบ มันจะลบแถวนั้นทิ้งแล้วสร้างแถวใหม่ที่มีข้อมูล name='Somchai' และ age=28 ลงไปแทนที่ทันที

ผลลัพธ์คือ ข้อมูลเดิมที่มี id=1 จะหายไป และถูกแทนที่ด้วยค่าใหม่ที่คุณเพิ่งระบุเข้าไป ทำให้ข้อมูลในฐานข้อมูลเป็นเวอร์ชันล่าสุดเสมอ

ความแตกต่างระหว่าง MySQL และ MariaDB

ในฐานะมือใหม่ คุณอาจสงสัยว่าต้องเลือกใช้ตัวไหนระหว่าง MySQL และ MariaDB (ฐานข้อมูลที่แยกตัวออกมาจาก MySQL เพื่อพัฒนาต่อให้ฟรีและเปิดกว้างมากขึ้น) คำตอบคือในระดับการใช้งานคำสั่ง INSERT ทั้งสองตัวนี้แทบไม่ต่างกันเลย คุณสามารถใช้โค้ดเดียวกันได้เกือบทั้งหมด

ความแตกต่างจะไปอยู่ที่รายละเอียดเชิงลึก เช่น การจัดการ Storage Engine (เครื่องมือที่ใช้จัดเก็บข้อมูลในระดับล่าง) หรือความเร็วในการประมวลผล ซึ่งสำหรับคนที่เพิ่งเริ่มฝึกเขียนโค้ด ให้โฟกัสที่การเขียนคำสั่งให้ถูกต้องตามหลัก SQL (ภาษาสำหรับคุยกับฐานข้อมูล) เป็นหลักก่อนจะดีกว่า

คำแนะนำสำหรับโปรแกรมเมอร์มือใหม่คือ ให้เลือกใช้ตัวใดตัวหนึ่งตามที่โปรเจกต์หรือบริษัทของคุณใช้งาน การเรียนรู้คำสั่งมาตรฐานเหล่านี้จะทำให้คุณย้ายไปใช้ฐานข้อมูลตัวอื่นได้ง่ายในอนาคต เพราะพื้นฐานการจัดการข้อมูลนั้นเหมือนกันทุกที่

  • เลือกใช้ MariaDB หากต้องการความยืดหยุ่นและฟีเจอร์ที่ทันสมัยสำหรับโปรเจกต์ทั่วไป
  • เลือกใช้ MySQL หากต้องทำงานกับระบบองค์กรขนาดใหญ่ที่มีการตั้งค่ามาตรฐานเฉพาะตัว
  • ทั้งสองตัวใช้ภาษา SQL เดียวกัน ดังนั้นไม่ต้องกังวลเรื่องการเรียนรู้ใหม่หากต้องสลับไปมา

สรุป: เลือกใช้ให้ถูกงานเพื่อประสิทธิภาพที่ดี

การเลือกใช้คำสั่งที่เหมาะสมกับงานจะช่วยให้คุณเป็นโปรแกรมเมอร์ที่เขียนโค้ดได้มีประสิทธิภาพมากขึ้น เริ่มต้นจากการฝึกใช้ INSERT INTO ให้คล่อง แล้วจึงขยับไปใช้ Bulk Insert เพื่อเพิ่มความเร็วในการทำงาน ส่วนเรื่องข้อมูลซ้ำก็ให้เลือกระหว่าง INSERT IGNORE หรือ REPLACE INTO ตามวัตถุประสงค์ของโปรเจกต์

ตัวอย่างการนำไปใช้จริง: สมมติว่าคุณกำลังทำระบบสมัครสมาชิก หากผู้ใช้สมัครซ้ำด้วยอีเมลเดิม คุณอาจใช้ INSERT IGNORE เพื่อป้องกันไม่ให้ระบบพัง แต่ถ้าเป็นการอัปเดตข้อมูลโปรไฟล์ผู้ใช้ คุณควรใช้ REPLACE INTO เพื่อให้ข้อมูลล่าสุดแสดงผลเสมอ การเข้าใจความแตกต่างเล็กน้อยเหล่านี้คือจุดเริ่มต้นของความเป็นมืออาชีพครับ

ฝึกฝนการเขียนคำสั่งเหล่านี้ผ่าน Terminal (หน้าจอพิมพ์คำสั่ง) ของฐานข้อมูลบ่อยๆ แล้วคุณจะพบว่าการจัดการข้อมูลไม่ใช่เรื่องน่ากลัว หากติดปัญหาในขั้นตอนไหน ให้ย้อนกลับมาดูโครงสร้างคำสั่งพื้นฐานอีกครั้ง ความผิดพลาดในตอนเริ่มเป็นเรื่องปกติของทุกคน ขอให้สนุกกับการเขียนโค้ดครับ

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

MySQL/MariaDB

สอนวิธี Backup และ Restore ฐานข้อมูล MySQL/MariaDB ด้วย mysqldump บน Windows

มือใหม่หัดเขียนโปรแกรมต้องรู้! วิธีสำรองข้อมูล (Backup) และกู้คืน (Restore) ฐานข้อมูลด้วย mysqldump ผ่าน Command Line ป้องกันงานหาย ทำตามได้จริง

1 month ago 9 นาที
23 views
จัดการ User และสิทธิ์ใน MySQL/MariaDB ให้ปลอดภัยด้วยคำสั่ง GRANT และ REVOKE
MySQL/MariaDB

จัดการ User และสิทธิ์ใน MySQL/MariaDB ให้ปลอดภัยด้วยคำสั่ง GRANT และ REVOKE

มือใหม่หัดใช้ฐานข้อมูลต้องรู้! วิธีสร้าง User, กำหนดสิทธิ์ (Permission) และตั้งค่าความปลอดภัยให้ MySQL/MariaDB เพื่อป้องกันข้อมูลรั่วไหลแบบมือโปร

1 month ago 8 นาที
24 views
เข้าใจ MySQL และ MariaDB Trigger: เขียนคำสั่งอัตโนมัติให้ฐานข้อมูลทำงานแทนเรา
MySQL/MariaDB

เข้าใจ MySQL และ MariaDB Trigger: เขียนคำสั่งอัตโนมัติให้ฐานข้อมูลทำงานแทนเรา

อยากให้ฐานข้อมูลทำงานอัตโนมัติเมื่อมีการเพิ่มหรือลบข้อมูลไหม? มาเรียนรู้การใช้ Trigger (ตัวกระตุ้นการทำงาน) ใน MySQL และ MariaDB เพื่อลดภาระงานโค้ดกัน

1 month ago 8 นาที
23 views