One command, one migration, and the shape of your data is not the same. Schema evolves. Tables grow. Queries break or speed up. Every design decision is frozen in structure until you decide to alter it.
Adding a new column in SQL sounds simple: ALTER TABLE table_name ADD COLUMN column_name data_type;. But the effect is deeper. Storage shifts. Indexes may need alignment. Data defaults must be considered. Nulls can spread fast if you don’t set a constraint. In production, every millisecond matters.
The cost is not just compute. Locking can stall writes. In some databases, large tables may cause the migration to block reads. Understanding the engine you run is the difference between smooth rollout and downtime. MySQL handles this differently than Postgres. Some engines rebuild the table. Others write in place.