MySQL INSERT INTO Query: วิธีเพิ่มแถวในตาราง (ตัวอย่าง)

⚡ สรุปอย่างชาญฉลาด

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

  • 📥 ไวยากรณ์หลัก: คำสั่ง INSERT INTO `table_name`(column_1,column_2) VALUES (value_1,value_2) จะสร้างแถวใหม่หนึ่งแถวในตารางที่ระบุชื่อ
  • 🔤 กฎการอ้างอิง: ค่าที่เป็นข้อความและวันที่ต้องใส่เครื่องหมายอัญประกาศเดี่ยว ส่วนค่าตัวเลขไม่ต้องใส่เครื่องหมายอัญประกาศ
  • 0️⃣ กับดักนำหน้าศูนย์: หมายเลขโทรศัพท์ที่ไม่มีเครื่องหมายคำพูดจะถูกอ่านเป็นตัวเลข ดังนั้นเลขศูนย์นำหน้าจึงถูกตัดทิ้งไปโดยไม่มีการแจ้งเตือนใดๆ
  • 🔀 ลำดับคอลัมน์: ลำดับของคอลัมน์ภายในคำสั่งค้นหาไม่สำคัญ ตราบใดที่แต่ละค่าตรงกับคอลัมน์ที่เกี่ยวข้อง
  • 🕳️ คอลัมน์ที่ถูกละเว้น: คอลัมน์ที่ไม่ได้ระบุในคำสั่งจะได้รับค่า NULL หรือค่าเริ่มต้นที่ประกาศไว้
  • 📑 จากตารางหนึ่งไปยังอีกตารางหนึ่ง: คำสั่ง INSERT INTO … SELECT จะคัดลอกแถวระหว่างตารางเมื่อโครงสร้างคอลัมน์ตรงกัน

INSERT INTO คืออะไร?

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

ไวยากรณ์พื้นฐาน

ลองดูที่ไวยากรณ์พื้นฐานของ INSERT INTO MySQL คำสั่ง:

INSERT INTO `table_name`(column_1,column_2,...) VALUES (value_1,value_2,...);

ที่นี่

  • INSERT INTO `table_name` เป็นคำสั่งที่บอก MySQL เซิร์ฟเวอร์เพื่อเพิ่มแถวใหม่ลงในตารางชื่อ `table_name.`
  • (column_1,column_2,…) ระบุคอลัมน์ที่จะอัปเดตในคอลัมน์ใหม่ MySQL แถว
  • VALUES (value_1,value_2,…) ระบุค่าที่จะเพิ่มลงในแถวใหม่

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

  • ประเภทข้อมูลสตริง – ค่าสตริงทั้งหมดควรอยู่ในเครื่องหมายคำพูดเดี่ยว
  • ประเภทข้อมูลตัวเลข – ค่าตัวเลขทั้งหมดควรระบุโดยตรงโดยไม่ต้องใส่เครื่องหมายอัญประกาศเดี่ยวหรือเครื่องหมายอัญประกาศคู่
  • ประเภทข้อมูลวันที่ – ใส่ค่าวันที่ไว้ในเครื่องหมายคำพูดเดี่ยวในรูปแบบ 'YYYY-MM-DD'

การแทรกหลายแถวพร้อมกัน

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

INSERT INTO `categories`(`category_name`,`remarks`) VALUES
('Documentary', 'Factual films'),
('Musical', 'Song driven films');

MySQL ตัวอย่างคำสั่ง INSERT INTO

สมมติว่าเรามีรายชื่อสมาชิกห้องสมุดใหม่ต่อไปนี้ที่จำเป็นต้องเพิ่มเข้าไปในฐานข้อมูล

ชื่อเต็ม วัน เดือน ปีเกิด เพศ ที่อยู่ทางกายภาพ รหัสไปรษณีย์ เบอร์ติดต่อ ที่อยู่อีเมล
ลีโอนาร์ด ฮอฟสตัดเตอร์ ชาย วู้ดเครสต์ 0845738767
เชลดอนคูเปอร์ ชาย วู้ดเครสต์ 0976736763
ราชสีห์ คูทรพาลี ชาย วู้ดเครสต์ 0938867763
เลสลี่ วิงเคิล 14/02/1984 ชาย วู้ดเครสต์ 0987636553
ฮาวเวิร์ด โวโลวิทซ์ 24/08/1981 ชาย SouthPark PO Box 4563 0987786553 lwolowitz@email.me

เราจะแทรกข้อมูลทีละแถว โดยเริ่มจาก Leonard Hofstadter เราจะถือว่าหมายเลขติดต่อเป็นข้อมูลประเภทตัวเลข และจะไม่ใส่เครื่องหมายอัญประกาศเดี่ยวครอบหมายเลขนั้น

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ('Leonard Hofstadter','Male','Woodcrest',0845738767);

การเรียกใช้สคริปต์ข้างต้นจะลบเลข 0 ออกจากหมายเลขติดต่อของเลียวนาร์ด เนื่องจากค่าดังกล่าวถูกมองว่าเป็นตัวเลข และเลขศูนย์นำหน้าไม่มีความสำคัญ

เพื่อหลีกเลี่ยงปัญหาดังกล่าว ค่าจะต้องอยู่ในเครื่องหมายอัญประกาศเดี่ยว ดังแสดงด้านล่าง

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ('Sheldon Cooper','Male','Woodcrest', '0976736763');

⚠️ เคล็ดลับ: จัดเก็บหมายเลขโทรศัพท์ รหัสไปรษณีย์ และตัวระบุที่คล้ายกันในคอลัมน์ข้อความ เช่น VARCHAR คอลัมน์ตัวเลขไม่สามารถมีเลขศูนย์นำหน้าได้

การเปลี่ยนลำดับคอลัมน์

การเปลี่ยนลำดับของคอลัมน์ไม่มีผลกับการสืบค้น INSERT MySQLตราบใดที่ค่าที่ถูกต้องได้ถูกกำหนดให้กับคอลัมน์ที่ถูกต้องแล้ว ตัวอย่างคำสั่งค้นหาด้านล่างนี้แสดงให้เห็นถึงประเด็นนี้

INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`) VALUES ('0938867763','Male','Rajesh Koothrappali','Woodcrest');

ข้อความค้นหาข้างต้นข้ามคอลัมน์วันเดือนปีเกิด โดยค่าเริ่มต้น, MySQL แทรกค่า NULL ลงในคอลัมน์ที่ไม่ได้ระบุไว้ในคำสั่ง INSERT

ตอนนี้เรามาแทรกข้อมูลของเลสลี่ ซึ่งมีวันเดือนปีเกิดระบุไว้แล้ว โดยค่าวันที่ต้องใส่ไว้ในเครื่องหมายอัญประกาศเดี่ยวในรูปแบบ 'YYYY-MM-DD'

INSERT INTO `members` (`full_names`,`date_of_birth`,`gender`,`physical_address`,`contact_number`) VALUES ('Leslie Winkle','1984-02-14','Male','Woodcrest', '0987636553');

การละเว้นรายการคอลัมน์

แบบสอบถามข้างต้นทั้งหมดได้ตั้งชื่อคอลัมน์และแมปคอลัมน์เหล่านั้นกับค่าแล้ว หากเราใส่ค่าให้กับทุกคอลัมน์ในตาราง รายการคอลัมน์ก็สามารถละเว้นได้จากแบบสอบถาม MySQL แทรกแบบสอบถาม

INSERT INTO `members` VALUES (9,'Howard Wolowitz','Male','1981-08-24',
'SouthPark','P.O. Box 4563', '0987786553', 'lwolowitz@email.me');

ตอนนี้เรามาใช้ คำสั่ง SELECT เพื่อดูข้อมูลทุกแถวในตารางสมาชิก

SELECT * FROM `members`;
หมายเลขสมาชิก เต็ม_ชื่อ เพศ วันเกิด ทางกายภาพ_ที่อยู่ รหัสไปรษณีย์ เบอร์ติดต่อ อีเมล
1 เจเน็ต โจนส์ หญิง 21-07-1980 ถนนสายแรก แปลงที่ 4 กระเป๋าส่วนตัว 0759 253 542 janetjones@yagoo.cm
2 เจเน็ต สมิธ โจนส์ หญิง 23-06-1980 เมลโรส 123 NULL NULL jj@fstreet.com
3 โรเบิร์ต ฟิล ชาย 12-07-1989 3 ถนน 34 NULL 12345 rm@tstreet.com
4 กลอเรียวิลเลียมส์ หญิง 14-02-1984 2 ถนน 23 NULL NULL NULL
5 ลีโอนาร์ด ฮอฟสตัดเตอร์ ชาย NULL วู้ดเครสต์ NULL 845738767 NULL
6 เชลดอนคูเปอร์ ชาย NULL วู้ดเครสต์ NULL 0976736763 NULL
7 ราชสีห์ คูทรพาลี ชาย NULL วู้ดเครสต์ NULL 0938867763 NULL
8 เลสลี่ วิงเคิล ชาย 14-02-1984 วู้ดเครสต์ NULL 0987636553 NULL
9 ฮาวเวิร์ด โวโลวิทซ์ ชาย 24-08-1981 SouthPark PO Box 4563 0987786553 lwolowitz@email.me

โปรดสังเกตว่าหมายเลขติดต่อของ Leonard Hofstadter ได้ตัดเลขศูนย์นำหน้าออกไปแล้ว ตามที่คาดการณ์ไว้ ส่วนหมายเลขที่อ้างอิงยังคงมีเลขศูนย์นำหน้าอยู่

การแทรกลงในตารางจากตารางอื่น

คำสั่ง INSERT ยังสามารถใช้เพื่อแทรกข้อมูลลงในตารางจากตารางอื่นได้ ไวยากรณ์พื้นฐานดังแสดงด้านล่าง

INSERT INTO table_1 SELECT * FROM table_2;

ต่อไปนี้เราจะสร้างตารางจำลองสำหรับหมวดหมู่ภาพยนตร์ โดยตั้งชื่อว่า categories_archive สคริปต์ด้านล่างนี้คือโค้ดสำหรับสร้างตารางดังกล่าว สร้างตาราง.

CREATE TABLE `categories_archive` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

เรียกใช้สคริปต์ด้านบนเพื่อสร้างตาราง ตอนนี้เรามาแทรกข้อมูลทั้งหมดจากตาราง categories ลงในตาราง categories archive กัน

INSERT INTO `categories_archive` SELECT * FROM `categories`;

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

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;

การเรียกใช้คำสั่ง SELECT ด้านล่างจะให้ผลลัพธ์ดังต่อไปนี้

SELECT * FROM `categories_archive`;
Category_id category_name หมายเหตุ
1 ความขบขัน ภาพยนตร์ที่มีอารมณ์ขัน
2 โรแมนติก เรื่องราวของความรัก
3 มหากาพย์ เรื่องราวภาพยนตร์โบราณ
4 สยองขวัญ NULL
5 นิยายวิทยาศาสตร์ NULL
6 ที่ทำให้ตื่นเต้นเร้าใจ NULL
7 การกระทำ NULL
8 โรแมนติกคอมเมดี้ NULL
9 การ์ตูน NULL
10 การ์ตูน NULL

ตัวอย่าง PHP: แทรกลงใน MySQL ตาราง

ฟังก์ชัน mysqli_query ใช้เพื่อดำเนินการ SQL คำสั่ง SQL สำหรับ PHP สามารถรันคำสั่ง Insert, Select, Update และ Delete ได้ โดยมีไวยากรณ์ดังต่อไปนี้

mysqli_query($db_handle,$query);

ที่นี่

  • “mysqli_query(…)” คือฟังก์ชันที่ดำเนินการแบบสอบถาม SQL
  • “$query” คือคำสั่ง SQL ที่จะถูกเรียกใช้งาน
  • “$db_handle” คือลิงก์การเชื่อมต่อเซิร์ฟเวอร์ที่ได้รับคืนจาก mysqli_connect

ตัวอย่าง

$servername = "localhost";
$username = "alex";
$password = "yPXuPT";
$dbname = "afmznf";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO addkeyworddata(link, keyword) VALUES ('https://www.guru99.com/','1000')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully" . '<br>';
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

คำถามที่พบบ่อย

MySQL ระบบจะปฏิเสธข้อมูลนั้นเนื่องจากเกิดข้อผิดพลาดรายการซ้ำ ให้ใช้คำสั่ง INSERT IGNORE เพื่อข้ามแถวนั้นโดยไม่แจ้งให้ทราบล่วงหน้า หรือใช้คำสั่ง INSERT … ON DUPLICATE KEY UPDATE เพื่ออัปเดตแถวที่มีอยู่แล้วแทน

เรียกใช้คำสั่ง SELECT LAST_INSERT_ID() ทันทีหลังจากแทรกข้อมูล หรือเรียกใช้ mysqli_insert_id($conn) ใน PHP คำสั่งนี้จะส่งคืนค่าคีย์ AUTO_INCREMENT ที่สร้างขึ้นสำหรับแถวล่าสุดในการเชื่อมต่อของคุณเอง

ห้ามนำข้อมูลที่ผู้ใช้ป้อนเข้ามาไปต่อเข้ากับสตริงคำสั่งค้นหาโดยตรง ให้ใช้คำสั่งเตรียมการ (prepared statements) ที่มีพารามิเตอร์ผูกไว้ เพื่อให้ค่าต่างๆ ถูกส่งแยกจากกัน SQL และไม่สามารถดำเนินการเป็นคำสั่งได้

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

ใส่ข้อมูลลงในสำเนาสำหรับการพัฒนา (development copy) ก่อน แถวที่สร้างโดย AI อาจทำให้คีย์ต่างประเทศเสียหาย ความยาวคอลัมน์เกินกำหนด หรือสร้างวันที่ไม่ถูกต้อง เรียกใช้ชุดข้อมูลในธุรกรรมเพื่อให้สามารถย้อนกลับได้

สรุปโพสต์นี้ด้วย: