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

MySQL: ลบแถวที่มีสตริง "foo" ในตาราง "bar" ด้วย LIKE

การลบแถวที่มีสตริงเฉพาะ (เช่น "foo") ในคอลัมน์ข้อความ สามารถทำได้ด้วยคำสั่ง DELETE ร่วมกับ LIKE และ wildcard %

รูปแบบคำสั่ง

DELETE FROM table_name
WHERE column_name LIKE '%search_string%';
  • % - ตรงกับตัวอักษร 0 หรือมากกว่า (ทุกตำแหน่ง)
  • %foo% - มี "foo" อยู่ที่ไหนก็ได้ในสตริง
  • foo% - เริ่มต้นด้วย "foo"
  • %foo - จบด้วย "foo"

ตัวอย่างการใช้งาน

1. สร้างตาราง bar และเพิ่มข้อมูล

CREATE TABLE bar (
    Id INT NOT NULL AUTO_INCREMENT,
    Words LONGTEXT,
    PRIMARY KEY (Id)
);

INSERT INTO bar (Words) VALUES
('Javafoo'),
('fooMySQL'),
('Introduction to foo C and C++'),
('Introduction to Node.js'),
('Introduction to Hibernate framework');

ข้อมูลในตาราง:

+----+-------------------------------------+
| Id | Words                               |
+----+-------------------------------------+
|  1 | Javafoo                             |
|  2 | fooMySQL                            |
|  3 | Introduction to foo C and C++       |
|  4 | Introduction to Node.js             |
|  5 | Introduction to Hibernate framework |
+----+-------------------------------------+

2. ลบแถวที่มี "foo" อยู่ที่ไหนก็ได้

DELETE FROM bar
WHERE Words LIKE '%foo%';

ผลลัพธ์: Query OK, 3 rows affected

คำสั่งเดียวนี้ครอบคลุมทุกกรณี: %foo% = เริ่มต้นด้วย foo, จบด้วย foo, หรืออยู่กลาง

3. ตรวจสอบข้อมูลที่เหลือ

SELECT * FROM bar;
+----+-------------------------------------+
| Id | Words                               |
+----+-------------------------------------+
|  4 | Introduction to Node.js             |
|  5 | Introduction to Hibernate framework |
+----+-------------------------------------+

กรณีต้องการเฉพาะบางตำแหน่ง

เงื่อนไขความหมายตัวอย่างตรง
LIKE 'foo%'เริ่มต้นด้วย foofooBar, foo123
LIKE '%foo'จบด้วย fooBarfoo, 123foo
LIKE '%foo%'มี foo อยู่ที่ไหนก็ได้foo, afoo, fooB, afooB
LIKE 'foo'เท่ากับ foo ทุกประการfoo

การลบแบบ Case-Sensitive

MySQL เริ่มต้นไม่ case-sensitive (foo = FOO = Foo) หากต้องการ case-sensitive:

DELETE FROM bar
WHERE Words LIKE BINARY '%foo%';

คำเตือน

  • ทดสอบด้วย SELECT ก่อน DELETE: SELECT * FROM bar WHERE Words LIKE '%foo%';
  • Backup ข้อมูล ก่อนลบจำนวนมาก
  • พิจารณา TRUNCATE หากต้องการลบทั้งตาราง (เร็วกว่า แต่อาจไม่ rollback ได้)