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

MySQL: สร้างคำสั่ง ALTER TABLE เพื่อเปลี่ยนชื่อคอลัมน์เป็นตัวพิมพ์เล็กทั้งหมด

การสร้างคำสั่ง ALTER TABLE เพื่อเปลี่ยนชื่อคอลัมน์เป็น Lowercase ทั้งตาราง

ใช้ information_schema.columns สร้างคำสั่ง ALTER TABLE ... CHANGE สำหรับทุกคอลัมน์ในตาราง เพื่อเปลี่ยนชื่อเป็นตัวพิมพ์เล็กทั้งหมด

สร้างตารางตัวอย่าง

mysql> create table DemoTable1 (
    -> StudentFirstName varchar(20),
    -> StudentLastName varchar(20),
    -> StudentAge int,
    -> StudentCountryName varchar(20)
    -> );
Query OK, 0 rows affected (4.20 sec)

คำสั่งสร้าง ALTER TABLE statements

mysql> select concat('alter table ', table_name, ' change `', column_name, '` `', 
    -> lower(column_name), '` ', column_type, ';')
    -> from information_schema.columns 
    -> where table_schema = 'demo';

ผลลัพธ์ (คำสั่ง ALTER ที่สร้างขึ้น)

+-----------------------------------------------------------------------------------------------------------------+
| concat('alter table ', table_name, ' change `', column_name, '` `', lower(column_name), '` ', column_type, ';') |
+-----------------------------------------------------------------------------------------------------------------+
| alter table demotable1 change `StudentFirstName` `studentfirstname` varchar(20);                                 |
| alter table demotable1 change `StudentLastName` `studentlastname` varchar(20);                                   |
| alter table demotable1 change `StudentAge` `studentage` int(11);                                                 |
| alter table demotable1 change `StudentCountryName` `studentcountryname` varchar(20);                             |
| alter table mytable change `MyEuroColumn` `myeurocolumn` varchar(5);                                             |
+-----------------------------------------------------------------------------------------------------------------+

วิธีใช้งาน

  1. รันคำสั่ง SELECT ข้างต้น
  2. คัดลอกผลลัพธ์ (คอลัมน์เดียว)
  3. รันคำสั่ง ALTER TABLE ที่ได้ทีละคำสั่ง หรือรวมเป็น script

คำสั่งแบบรันได้ทันที (Prepared Statement)

SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, 
       '` CHANGE `', COLUMN_NAME, '` `', LOWER(COLUMN_NAME), '` ', COLUMN_TYPE, ';') AS alter_sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_database'
  AND TABLE_NAME = 'your_table';

ข้อควรระวัง

  • ต้องมีสิทธิ์ ALTER บนตาราง
  • คอลัมน์ที่มีการอ้างอิงจาก Foreign Key, View, Trigger, Stored Procedure อาจล้มเหลว ต้องลบ constraint ก่อน
  • Application code ที่ใช้ชื่อคอลัมน์เดิมจะต้องแก้ไขให้ตรงกับชื่อใหม่
  • ใน MySQL 8.0+ ชื่อคอลัมน์ไม่ case-sensitive โดยค่าเริ่มต้น (ขึ้นอยู่กับ collation) แต่การ rename ให้สอดคล้องกับ convention (snake_case) ถือเป็น best practice

ขยายใช้: snake_case แทน lowercase ทั้งหมด

-- แปลง CamelCase เป็น snake_case
LOWER(REGEXP_REPLACE(COLUMN_NAME, '([a-z])([A-Z])', '\\1_\\2'))

(ต้องใช้ MySQL 8.0+ ที่มี REGEXP_REPLACE)