在线DDL

发布于:2025-03-09 ⋅ 阅读:(123) ⋅ 点赞:(0)

从 MySQL 5.6 开始,引入了 在线 DDL(Online DDL) 功能,允许在不锁定表或最小化锁定的情况下执行某些 DDL 操作。这大大提高了数据库的可用性和性能。以下是 MySQL 5.6 及以上版本支持的在线 DDL 操作:


1. 支持的在线 DDL 操作

(1) 添加列
  • 语法
    ALTER TABLE table_name ADD COLUMN column_name column_definition;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,表结构立即生效。
(2) 删除列
  • 语法
    ALTER TABLE table_name DROP COLUMN column_name;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,表结构立即生效。
(3) 修改列类型
  • 语法
    ALTER TABLE table_name MODIFY COLUMN column_name new_column_definition;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,表结构立即生效。
(4) 添加索引
  • 语法
    CREATE INDEX index_name ON table_name (column_name);
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,索引立即生效。
(5) 删除索引
  • 语法
    DROP INDEX index_name ON table_name;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,索引立即删除。
(6) 重命名表
  • 语法
    ALTER TABLE table_name RENAME TO new_table_name;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,表名立即生效。
(7) 设置默认值
  • 语法
    ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_value;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,默认值立即生效。
(8) 删除默认值
  • 语法
    ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;
    
  • 支持版本:MySQL 5.6 及以上。
  • 特点
    • 支持并发读写操作。
    • 操作完成后,默认值立即删除。

2. 在线 DDL 的特点

  • 并发性:支持并发读写操作,减少对业务的影响。
  • 原子性:操作完成后,表结构立即生效,无需重启数据库。
  • 性能:相比传统 DDL,在线 DDL 的性能更高,尤其是在大表上操作时。

3. 注意事项

  • 锁机制:虽然在线 DDL 支持并发读写,但在某些操作中仍可能短暂锁定表(如修改列类型)。
  • 资源消耗:在线 DDL 操作可能会占用较多的 CPU 和 I/O 资源,建议在业务低峰期执行。
  • 版本差异:不同版本的 MySQL 对在线 DDL 的支持程度有所不同,建议根据实际版本选择合适的操作。

4. 示例

(1) 添加列
ALTER TABLE users ADD COLUMN age INT;
(2) 删除列
ALTER TABLE users DROP COLUMN age;
(3) 修改列类型
ALTER TABLE users MODIFY COLUMN age BIGINT;
(4) 添加索引
CREATE INDEX idx_name ON users (name);
(5) 删除索引
DROP INDEX idx_name ON users;
(6) 重命名表
ALTER TABLE users RENAME TO customers;
(7) 设置默认值
ALTER TABLE users ALTER COLUMN age SET DEFAULT 18;
(8) 删除默认值
ALTER TABLE users ALTER COLUMN age DROP DEFAULT;

总结

MySQL 5.6 及以上版本支持多种在线 DDL 操作,包括添加列、删除列、修改列类型、添加索引、删除索引、重命名表、设置默认值和删除默认值等。在线 DDL 提高了数据库的可用性和性能,但在执行时仍需注意锁机制、资源消耗和版本差异等问题。


网站公告

今日签到

点亮在社区的每一天
去签到