DDL即数据库定义语言,是SQL语言的重要分支,主要用于定义和管理数据库的所有结构和模式,常见的操作包括创建、修改、删除数据库、表、索引等对象。在实际的数据库开发和维护工作中,DDL语句是必须掌握的基础技能。

DDL语句的核心操作类型
DDL语句主要包含以下几类核心操作,不同的操作对应不同的使用场景:
- CREATE:用于创建新的数据库、表、索引、视图等对象
- ALTER:用于修改已存在的数据库、表等对象的结构
- DROP:用于删除数据库、表、索引、视图等对象
- TRUNCATE:用于清空表中的所有数据,同时保留表结构
数据库相关DDL实例
创建数据库
创建数据库是最基础的DDL操作,语法格式如下:
-- 创建名为test_db的数据库,设置字符集为utf8mb4 CREATE DATABASE IF NOT EXISTS test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
上述语句中IF NOT EXISTS的作用是避免数据库已存在时执行语句报错,字符集设置为utf8mb4可以支持更多特殊字符包括emoji的存储。
修改数据库
如果已经创建的数据库字符集不符合需求,可以使用ALTER语句修改:
-- 修改test_db数据库的字符集为utf8 ALTER DATABASE test_db CHARACTER SET utf8 COLLATE utf8_general_ci;
删除数据库
删除数据库操作需要谨慎执行,执行后数据库内所有数据都会丢失:
-- 删除名为test_db的数据库 DROP DATABASE IF EXISTS test_db;
数据表相关DDL实例
创建数据表
创建数据表时需要指定表名、字段名、字段类型以及约束条件,以下是一个用户表的创建示例:
-- 创建用户表user_info
CREATE TABLE IF NOT EXISTS user_info (
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
password VARCHAR(100) NOT NULL COMMENT '密码',
age INT DEFAULT 0 COMMENT '年龄',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
上述语句中指定了主键自增、非空、唯一、默认值等约束,同时设置了存储引擎为InnoDB,字符集为utf8mb4。
修改数据表结构
当表结构需要调整时,可以使用ALTER TABLE语句完成多种修改操作:
-- 给user_info表新增邮箱字段 ALTER TABLE user_info ADD COLUMN email VARCHAR(100) COMMENT '用户邮箱'; -- 修改user_info表中age字段的类型为BIGINT ALTER TABLE user_info MODIFY COLUMN age BIGINT COMMENT '年龄'; -- 删除user_info表中的email字段 ALTER TABLE user_info DROP COLUMN email; -- 修改user_info表的表名为new_user_info ALTER TABLE user_info RENAME TO new_user_info;
删除和清空数据表
删除表会同时删除表结构和表内所有数据,清空表只会删除数据保留表结构:
-- 清空new_user_info表的所有数据 TRUNCATE TABLE new_user_info; -- 删除new_user_info表 DROP TABLE IF EXISTS new_user_info;
索引和视图相关DDL实例
创建和删除索引
索引可以提升查询效率,创建和删除索引的DDL语句如下:
-- 给user_info表的username字段创建普通索引 CREATE INDEX idx_username ON user_info(username); -- 给user_info表的create_time字段创建唯一索引 CREATE UNIQUE INDEX idx_create_time ON user_info(create_time); -- 删除user_info表的idx_username索引 DROP INDEX idx_username ON user_info;
创建和删除视图
视图是基于查询结果集的虚拟表,相关DDL操作如下:
-- 创建查询成年用户的视图 CREATE VIEW adult_user_view AS SELECT id, username, age FROM user_info WHERE age >= 18; -- 删除adult_user_view视图 DROP VIEW IF EXISTS adult_user_view;
DDL语句使用注意事项
- DDL语句执行后会自动提交事务,无法回滚,执行删除类操作前务必确认数据是否需要备份
- 修改表结构尤其是大表的结构时,可能会产生锁表操作,影响线上业务的正常运行,建议在业务低峰期执行
- 不同的数据库对DDL语句的支持存在差异,比如MySQL的ALTER TABLE支持在线修改部分结构,而部分数据库则需要重建表
- 创建对象时建议加上
IF EXISTS或者IF NOT EXISTS判断,避免语句执行报错