MySQL
database management
SQL queries
moving columns
table structure

How to move columns in a MySQL table?

System Design practice on Codemia

Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.

Practice system design

Introduction

MySQL lets you reorder columns in a table definition, even though column order does not normally affect query correctness or performance. The real reasons to do it are usually cosmetic: cleaner schema display, easier exports, or compatibility with older tools that expect a certain layout. The important detail is that moving a column is still a real ALTER TABLE operation, so you need to restate the full column definition carefully.

Move A Column With MODIFY COLUMN

The usual syntax is ALTER TABLE ... MODIFY COLUMN plus either FIRST or AFTER.

To move a column to the front:

sql
ALTER TABLE employees
MODIFY COLUMN last_name VARCHAR(100) NOT NULL FIRST;

To move a column after another column:

sql
ALTER TABLE employees
MODIFY COLUMN last_name VARCHAR(100) NOT NULL AFTER first_name;

This changes only the order in the table definition. It does not move values between rows or rewrite application logic for you.

Repeat The Entire Column Definition

This is the part many people miss: MODIFY COLUMN redefines the column. You cannot safely write only the name and new position. You need to include the full type and attributes exactly as they should remain.

That means preserving details such as:

  • data type
  • nullability
  • default value
  • collation or character set when relevant
  • extra attributes such as AUTO_INCREMENT

A safe workflow is to inspect the table first:

sql
SHOW CREATE TABLE employees;

Then copy the existing definition and add only FIRST or AFTER.

CHANGE COLUMN When Renaming And Moving Together

If you want to rename and reposition a column in one statement, CHANGE COLUMN can do both jobs.

sql
ALTER TABLE employees
CHANGE COLUMN lname last_name VARCHAR(100) NOT NULL AFTER first_name;

This is useful, but if you are only reordering, MODIFY COLUMN is usually clearer because it does not imply a name change.

Reordering More Than One Column

MySQL lets you move multiple columns in a single ALTER TABLE statement.

sql
ALTER TABLE orders
MODIFY COLUMN created_at DATETIME NOT NULL FIRST,
MODIFY COLUMN customer_id BIGINT NOT NULL AFTER created_at;

That can help during a schema cleanup, but it is worth asking whether the effort is necessary. If many tools and queries use explicit column lists, the physical order may not matter enough to justify the migration.

What Column Order Does And Does Not Affect

Column order mainly affects how the schema looks in administration tools and how SELECT * returns columns. It does not make queries faster, because MySQL does not optimize lookups based on the visual order of columns in the definition.

If the real goal is performance, look at indexes, query plans, and data types instead. Reordering columns is almost always a readability or workflow decision.

Operational Considerations

Even a cosmetic schema change can be expensive on a large table. Depending on your MySQL version, storage engine, and exact table shape, ALTER TABLE may rebuild data or hold metadata locks that affect live traffic.

Before changing production tables, check how the change behaves in your version and test it against realistic data volume. A small local schema adjustment can become an operational event on a large production system.

Common Pitfalls

The biggest pitfall is omitting part of the column definition while using MODIFY COLUMN. That can accidentally change defaults, nullability, or other important attributes.

Another issue is moving columns because of a performance myth. Reordering is about schema presentation, not query optimization.

It is also easy to overlook operational impact. Large ALTER TABLE statements can still lock or rebuild structures, so do not treat them as harmless cosmetic edits.

Finally, relying on SELECT * makes column order feel more important than it should be. Explicit column lists make applications more robust and reduce the value of cosmetic reordering.

Summary

  • Move MySQL columns with ALTER TABLE ... MODIFY COLUMN ... FIRST or AFTER.
  • Restate the full column definition when you do it.
  • Use CHANGE COLUMN only when renaming and moving are both intended.
  • Column order mostly affects readability and display, not performance.
  • Treat schema reordering as a real DDL change with operational impact.

Related reading
Course
Beginner
27 lessons
10 hours
System Design Fundamentals

Build a strong foundation in designing scalable, reliable distributed systems.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

System Design practice on Codemia

Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.

Practice system design

All Rights Reserved.