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

ใช้ CONCAT() สำหรับ INSERT ข้อมูลซับซ้อนใน MySQL

ฟังก์ชัน CONCAT() ใน MySQL ช่วยรวมข้อความและค่าต่างๆ ได้ ซึ่งมีประโยชน์มากเมื่อต้อง INSERT ข้อมูลที่ต้องประกอบจากหลายส่วนหรือคำนวณจากคอลัมน์อื่น

สถานการณ์: สร้างชื่อโปรเจกต์จาก StudentId

ต้องการ INSERT ข้อมูลไปตารางที่สอง โดย ClientProjectName ประกอบด้วยข้อความคงที่ + StudentId

สร้างตารางแรกและข้อมูล

mysql> create table DemoTable (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(20)
);
mysql> insert into DemoTable(StudentFirstName) values('John');
mysql> insert into DemoTable(StudentFirstName) values('Larry');
mysql> insert into DemoTable(StudentFirstName) values('Bob');

สร้างตารางที่สอง

mysql> create table DemoTable2 (
    ClientId int,
    ClientProjectName varchar(20)
);

คำสั่ง INSERT ... SELECT พร้อม CONCAT()

mysql> insert into DemoTable2 
select StudentId, concat('Web Student=', StudentId) from DemoTable;

ผลลัพธ์

+----------+-------------------+
| ClientId | ClientProjectName |
+----------+-------------------+
| 1        | Web Student=1     |
| 2        | Web Student=2     |
| 3        | Web Student=3     |
+----------+-------------------+

ประโยชน์ของวิธีนี้

  • INSERT หลายแถวในคำสั่งเดียว (Bulk Insert)
  • คำนวณ/แปลงข้อมูลระหว่างทางได้
  • ลด Round-trip ระหว่าง Application และ Database
  • Atomic operation - ทำสำเร็จทั้งหมดหรือไม่ทำเลย

ฟังก์ชันสตริงที่ใช้ร่วมได้

  • CONCAT() - รวมสตริง (คืน NULL ถ้ามีค่า NULL ใดๆ)
  • CONCAT_WS(',', col1, col2) - รวมด้วยตัวคั่น (ข้าม NULL)
  • UPPER(), LOWER() - เปลี่ยนตัวพิมพ์
  • TRIM() - ตัดช่องว่าง
  • DATE_FORMAT() - จัดรูปแบบวันที่

ตัวอย่างเพิ่มเติม

INSERT INTO logs (message, created_at)
SELECT CONCAT('User ', username, ' logged in at ', DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')),
       NOW()
FROM users WHERE last_login > DATE_SUB(NOW(), INTERVAL 1 DAY);