SQL - DDL(数据定义语言)
DDL(Data Definition Language,数据定义语言)用来定义数据库对象:数据库、表、字段。 在 SQL 四分类(DDL / DML / DQL / DCL)中,DDL 负责「建结构」,DML 负责「改数据」。
一、数据库操作
-- 查询所有数据库
SHOW DATABASES;
-- 查询当前数据库
SELECT DATABASE();
-- 创建数据库([] 内为可选参数)
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
-- 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
-- 使用数据库
USE 数据库名;
二、表操作 - 查询
-- 查询当前库的所有表
SHOW TABLES;
-- 查询表结构
DESC 表名;
-- 查询指定表的建表语句
SHOW CREATE TABLE 表名;
三、表操作 - 创建
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
字段3 字段3类型 [COMMENT 字段3注释],
......
字段n 字段n类型 [COMMENT 字段n注释]
)[COMMENT 表注释];
注意:
[]内为可选参数,最后一个字段后面没有逗号。
数据类型
➡️ 见 MySQL 数据类型(数值 / 字符串 / 日期时间三类,含选型速记)
四、表操作 - 修改
-- 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
-- 案例:为 emp 表增加字段 nickname,类型 varchar(20)
ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';
-- 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
-- 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
-- 案例:将 emp 表的 nickname 字段改为 username,类型 varchar(30)
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
-- 删除字段
ALTER TABLE 表名 DROP 字段名;
-- 案例:删除 emp 表的 username 字段
ALTER TABLE emp DROP username;
-- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
-- 案例:将 emp 表名改为 employee
ALTER TABLE emp RENAME TO employee;
MODIFY只能改类型,CHANGE改名 + 改类型(新字段名写原字段名即等价于MODIFY)。
五、表操作 - 删除
-- 删除表
DROP TABLE [IF EXISTS] 表名;
-- 删除指定表,并重新创建该表(清空表数据)
TRUNCATE TABLE 表名;
注意:在删除表时,表中的全部数据也会被删除。
六、案例:设计员工表 emp
需求:设计一张员工信息表。
- 编号(纯数字)
- 员工工号(字符串类型,长度不超过 10 位)
- 员工姓名(字符串类型,长度不超过 10 位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为 18 位,身份证中有 X 这样的字符)
- 入职时间(取值年月日即可)
CREATE TABLE emp(
id INT COMMENT '编号',
workno VARCHAR(10) COMMENT '工号',
name VARCHAR(10) COMMENT '姓名',
gender CHAR(1) COMMENT '性别',
age TINYINT UNSIGNED COMMENT '年龄',
idcard CHAR(18) COMMENT '身份证号',
entrydate DATE COMMENT '入职时间'
) COMMENT '员工表';
设计思路:性别固定 1 个汉字 → CHAR(1);年龄非负 → TINYINT UNSIGNED;身份证固定 18 位 → CHAR(18);入职时间只要年月日 → DATE。
七、速查总结
数据库操作
SHOW DATABASES; -- 查看当前 MySQL 中的所有数据库
CREATE DATABASE 数据库名; -- 创建数据库
USE 数据库名; -- 切换到指定数据库
SELECT DATABASE(); -- 查看当前正在使用的数据库
DROP DATABASE 数据库名; -- 删除数据库(库内所有表一并删除)
表操作
SHOW TABLES; -- 查看当前数据库中的所有表
CREATE TABLE 表名(字段 字段类型, 字段 字段类型); -- 创建表
DESC 表名; -- 查看表结构(字段、类型、约束)
SHOW CREATE TABLE 表名; -- 查看建表语句
ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME TO ...; -- 修改表:加字段/改类型/改字段名/删字段/重命名表
DROP TABLE 表名; -- 删除表(表结构与数据一并删除)
TRUNCATE TABLE 表名; -- 清空表中全部数据(保留表结构)