Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีอัปเดตทุกแถวสลับกัน (Alternate Rows) ที่มีค่าเดียวกันใน MySQL

ใช้ WHERE Id % 2 = 0 อัปเดตเฉพาะแถวคู่ (Even ID)

รวม REPLACE() แทนที่ค่า และ WHERE Id % 2 = 0 เลือกแถวที่ ID หาร 2 ลงตัว (Even rows) เพื่ออัปเดตทีละแถวสลับ

ตัวอย่างสร้างตารางและข้อมูล

CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Subject VARCHAR(100)
);

INSERT INTO DemoTable (Subject) VALUES 
('C'), ('MongoDB'), ('Java'), ('MongoDB'), ('Python'), ('MongoDB');

ข้อมูลก่อนอัปเดต

+----+---------+
| Id | Subject |
+----+---------+
| 1  | C       |
| 2  | MongoDB |
| 3  | Java    |
| 4  | MongoDB |
| 5  | Python  |
| 6  | MongoDB |
+----+---------+

คำสั่งอัปเดตแถวคู่ (Id 2,4,6) แทนที่ MongoDB → MySQL

UPDATE DemoTable 
SET Subject = REPLACE(Subject, 'MongoDB', 'MySQL') 
WHERE Id % 2 = 0;

ข้อมูลหลังอัปเดต

+----+---------+
| Id | Subject |
+----+---------+
| 1  | C       |
| 2  | MySQL   |
| 3  | Java    |
| 4  | MySQL   |
| 5  | Python  |
| 6  | MySQL   |
+----+---------+

คำอธิบาย:

  • Id % 2 = 0 เลือก ID คู่ (2, 4, 6, ...)
  • REPLACE(Subject, 'MongoDB', 'MySQL') แทนที่คำว่า MongoDB ด้วย MySQL
  • แถวคี่ (1, 3, 5) ไม่ได้รับผลกระทบ

ประยุกต์ใช้:

  • อัปเดตแถวคี่: WHERE Id % 2 = 1
  • ทุก N แถว: WHERE Id % N = 0
  • สุ่ม 50%: WHERE RAND() < 0.5

⚠ ข้อควรระวัง: ใช้ ID ที่เป็น AUTO_INCREMENT และไม่มีช่องว่าง (Gap) จากการ DELETE หากมี Gap ลำดับอาจไม่สลับได้ตรงตามที่คาดหวัง ควรใช้ Window Function ROW_NUMBER() OVER (ORDER BY Id) (MySQL 8.0+) แทน