DDL (数据定义语言) 是用于定义数据库结构的语言(创建、修改、删除表、架构、索引等):
CREATE TABLE,ALTER TABLE,DROP TABLE。DML (数据操作语言) 是处理表中内容的操作语言(添加、修改、删除、查询行):
INSERT,UPDATE,DELETE,SELECT。例如,不同的用户可以仅拥有DML或DDL的不同权限:
-- DDL:创建表 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(100) ); -- DML:插入数据 INSERT INTO users (id, name) VALUES (1, 'Ivan');
"如果在明确的事务中执行DDL命令(例如DROP TABLE),可以回滚吗?"
大多数数据库管理系统(例如PostgreSQL,Oracle)支持DDL的事务,但许多不允许回滚DDL命令,即使它们明确包裹在事务中。在MySQL中,DDL命令总是立即提交。
BEGIN; DROP TABLE employees; ROLLBACK;
在大多数情况下,表将永久删除,即使进行了回滚。
故事
在开发环境中意外执行DROP TABLE导致表丢失——该命令无法撤销,即使进行了事务回滚。
故事
组织给予项目管理员权限,导致由于bug大规模修改数据库架构通过ALTER,导致服务长时间停机和订单损失。
故事
拒绝新手的DDL权限,团队忘记了部署迁移的过程需要DDL访问——经过数小时的调查和紧急提升角色,发布失败。