MySQL中DDL对DML的影响

改表时我们总是有些忐忑,担心对线上业务的影响。因此我们常使用pt-online-schema-change等工具进行在线改表,但这些工具改表往往涉及到数据的拷贝,改表很慢,所以我们想能不能直接改表呢,到底会有哪些影响呢?

https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.html

官方文档做了详细的说明,与我们想的不同,其实很多操作是不会阻塞表的读写的,比如加二级索引,加列等。但别高兴得太早,即使这些DDL不会阻塞读写,我们仍然不能直接改表,why?因为我们还得考虑主从延迟!

https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-limitations.html

MySQL 官方这篇文章中介绍到,一个DDL操作必须在主库上执行完毕才会开始在从库上执行,在主库上DDL操作进行时,是可以并发执行DML操作的,然而这些DML操作在从库上则必须等待DDL操作完毕才能开始开始执行,因此,DDL操作一定会造成主从延迟。

### MySQLDDL DML 的区别 #### 定义与作用范围 数据定义语言(DDL, Data Definition Language)涉及数据库对象的创建、修改删除,这些对象包括但不限于表、索引、视图等。而数据操纵语言(DML, Data Manipulation Language),则专注于对已存在表格内的记录执行增删改查操作。 #### 常见命令对比 - **DDL** - 创建新数据库 `CREATE DATABASE`[^4]。 - 显示现有数据库列表 `SHOW DATABASES`[^2]。 - 获取特定数据库的建库语句 `SHOW CREATE DATABASE 数据库名`。 - 删除整个数据库 `DROP DATABASE 数据库名`。 - **DML** - 插入新的行到指定表内 `INSERT INTO 表 (字段...) VALUES (...)`[^3]。 - 更新已有记录的内容 `UPDATE 表 SET 字段=值 WHERE 条件...`。 - 移除符合条件的数据项 `DELETE FROM 表 WHERE 条件...`。 - 清空表中全部条目而不影响其结构 `TRUNCATE TABLE 表名`。 通过上述描述可以看出,在处理逻辑上两者有着明显的分工:DDL负责构建或重构存储架构;DML则是针对具体实例实施变更动作。 ```sql -- DDL 示例 CREATE DATABASE IF NOT EXISTS example_db; USE example_db; CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), position TEXT ); -- DML 示例 INSERT INTO employees(name, position) VALUES ('Alice', 'Developer'); UPDATE employees SET position='Senior Developer' WHERE name='Alice'; DELETE FROM employees WHERE name='Bob'; -- 如果有名为 Bob 的员工会被移除 TRUNCATE TABLE employees; -- 将会清除所有雇员信息但是保留employees这张表本身 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值