การสร้างคำสั่ง 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); |
+-----------------------------------------------------------------------------------------------------------------+
วิธีใช้งาน
- รันคำสั่ง SELECT ข้างต้น
- คัดลอกผลลัพธ์ (คอลัมน์เดียว)
- รันคำสั่ง 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)