MySQL ALTER TABLE权威指南:掌握数据表修改核心技巧与实战教程

文章导读
ALTER TABLE tbl_name ADD COLUMN col_name column_definition [FIRST | AFTER col_name]; ALTER TABLE tbl_name ADD COLUMN (col_name column_definition,...); ALTER TABLE tbl_name ADD {INDEX|KEY} [index_name]
📋 目录
  1. 添加列
  2. 删除列
  3. 修改列定义
  4. 添加主键
  5. 删除主键
  6. 添加索引
  7. 修改表名
  8. 实战示例:重构用户表
A A

ALTER TABLE tbl_name ADD COLUMN col_name column_definition [FIRST | AFTER col_name]; ALTER TABLE tbl_name ADD COLUMN (col_name column_definition,...); ALTER TABLE tbl_name ADD {INDEX|KEY} [index_name] (col_name,...); ALTER TABLE tbl_name ADD {PRIMARY KEY|UNIQUE} [index_name] (col_name,...); ALTER TABLE tbl_name DROP COLUMN col_name; ALTER TABLE tbl_name DROP INDEX index_name;

添加列

使用ALTER TABLE ADD COLUMN来添加新列到表中。例如:ALTER TABLE users ADD COLUMN email VARCHAR(100); 这会在users表中添加一个email列,默认添加到表末尾。如果想指定位置,可以用FIRST或AFTER:ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER name;

删除列

删除列用DROP COLUMN:ALTER TABLE users DROP COLUMN phone; 注意,这会永久删除列及其数据,先备份很重要。

MySQL ALTER TABLE权威指南:掌握数据表修改核心技巧与实战教程

修改列定义

ALTER TABLE users MODIFY COLUMN email VARCHAR(150) NOT NULL; 这改变了email列的长度和允许空值。或者用CHANGE来改名:ALTER TABLE users CHANGE COLUMN old_email new_email VARCHAR(100);

添加主键

ALTER TABLE users ADD PRIMARY KEY (id); 如果id已是主键列,这会设置它为主键。

删除主键

ALTER TABLE users DROP PRIMARY KEY; 注意,删除主键后可能需要重建其他索引。

MySQL ALTER TABLE权威指南:掌握数据表修改核心技巧与实战教程

添加索引

ALTER TABLE users ADD INDEX idx_name (name); 或唯一索引:ALTER TABLE users ADD UNIQUE INDEX idx_email (email);

修改表名

ALTER TABLE old_table RENAME TO new_table; 简单重命名表。

MySQL ALTER TABLE权威指南:掌握数据表修改核心技巧与实战教程

实战示例:重构用户表

假设有users表,想添加列、改类型、加索引:ALTER TABLE users ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; ALTER TABLE users MODIFY COLUMN age INT NOT NULL; ALTER TABLE users ADD INDEX idx_age (age);

FAQ
Q: ALTER TABLE会锁表吗?
A: 是的,大多数操作会锁表,影响并发,高峰期慎用。
Q: 如何避免数据丢失?
A: 先备份表:CREATE TABLE users_backup AS SELECT * FROM users;
Q: 可以一次改多列吗?
A: 可以,用逗号分隔:ALTER TABLE users ADD COLUMN col1 INT, MODIFY COLUMN col2 VARCHAR(50);
Q: InnoDB和MyISAM区别?
A: InnoDB支持在线DDL,MyISAM更快但锁表更久。