Mysql-ALTER详解
以下是 MySQL 中 ALTER
语句的详细整理,用于修改数据库表的结构(DDL 操作),涵盖常见场景和语法示例:
一、修改表名
ALTER TABLE 旧表名 RENAME TO 新表名; -- 示例: ALTER TABLE users RENAME TO customers;
二、修改表结构
1. 添加列
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束] [FIRST|AFTER 某列]; -- 示例:添加 `email` 列(默认在最后) ALTER TABLE users ADD COLUMN email VARCHAR(100) NOT NULL; -- 示例:添加 `age` 列到 `name` 列之后 ALTER TABLE users ADD COLUMN age INT AFTER name;
2. 删除列
ALTER TABLE 表名 DROP COLUMN 列名; -- 示例: ALTER TABLE users DROP COLUMN age;
3. 修改列定义
- 修改数据类型或约束(注意数据兼容性):
- 重命名列(MySQL 8.0+ 支持 RENAME COLUMN):(旧版本需使用 CHANGE 语法):
4. 调整列顺序
ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型 [FIRST|AFTER 某列]; -- 示例:将 `email` 列移到第一列 ALTER TABLE users MODIFY COLUMN email VARCHAR(100) FIRST; -- 示例:将 `email` 列移到 `fullname` 之后 ALTER TABLE users MODIFY COLUMN email VARCHAR(100) AFTER fullname;
三、索引操作
1. 添加索引
-- 添加普通索引 ALTER TABLE 表名 ADD INDEX 索引名 (列名); -- 添加唯一索引 ALTER TABLE 表名 ADD UNIQUE 索引名 (列名); -- 示例: ALTER TABLE users ADD INDEX idx_email (email);
2. 删除索引
ALTER TABLE 表名 DROP INDEX 索引名; -- 示例: ALTER TABLE users DROP INDEX idx_email;
3. 主键操作
- 添加主键:
- 删除主键:
四、表选项修改
1. 修改存储引擎
ALTER TABLE 表名 ENGINE = 新引擎; -- 示例:改为 InnoDB ALTER TABLE users ENGINE = InnoDB;
2. 修改字符集
ALTER TABLE 表名 CHARACTER SET 字符集名 COLLATE 排序规则; -- 示例: ALTER TABLE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
3. 修改自增起始值
ALTER TABLE 表名 AUTO_INCREMENT = 新值; -- 示例: ALTER TABLE users AUTO_INCREMENT = 1000;
五、分区操作(高级)
-- 添加分区 ALTER TABLE 表名 ADD PARTITION (PARTITION 分区名 VALUES IN (值列表)); -- 删除分区 ALTER TABLE 表名 DROP PARTITION 分区名;
关键注意事项
- 备份数据:执行
ALTER
前建议备份表结构及数据。 - 锁表风险:大表修改可能锁表,影响业务(可考虑
pt-online-schema-change
工具)。 - 兼容性检查:修改列类型时需确保数据兼容(如字符串转整数可能失败)。
- 外键约束:修改主键或关联列时需处理外键依赖。
- 测试环境验证:生产环境操作前先在测试环境验证语法和效果。
掌握 ALTER
语句的用法,可以灵活应对表结构调整的需求,但需谨慎操作以避免数据丢失或服务中断!
进阶高级测试工程师 文章被收录于专栏
《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart