【MySQL1】| DDL 数据定义语言

一、SQL 通用基础语法规范

  1. 书写格式

    • SQL 支持单行、多行书写,语句必须以英文分号 ; 结尾
    • 可使用空格、Tab 缩进,提升可读性;
    • 行业规范:关键字(CREATE/ALTER/SELECT 等)建议大写,自定义库名 / 表名 / 字段小写区分。
  2. 注释写法

    • 单行注释:# 注释内容-- 注释内容-- 后必须加空格)
    • 多行注释:/* 多行注释内容 */
  3. SQL 四大语句分类 表格

    分类 全称 作用
    DDL 数据定义语言 定义数据库、表结构(库 / 表的创建、删除、修改)
    DML 数据操作语言 操作表内数据:新增、删除、修改
    DQL 数据查询语言 查询表中数据记录(最常用 SELECT
    DCL 数据控制语言 创建数据库用户、分配访问权限

二、DDL 数据库操作(操作库)

1. 查询数据库

sql

复制代码
-- 查询当前服务器所有数据库
SHOW DATABASES;

-- 查询当前正在使用的数据库
SELECT DATABASE();

2. 创建数据库

语法:

sql

复制代码
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集];

示例:

sql

复制代码
-- 创建库,不存在才创建,指定utf8mb4支持完整中文/表情
CREATE DATABASE IF NOT EXISTS db_demo DEFAULT CHARSET utf8mb4;
  • IF NOT EXISTS:避免库已存在时报错,生产必加;
  • utf8mb4:推荐字符集,兼容所有中文、emoji,替代旧 utf8

3. 使用 / 切换数据库

sql

复制代码
USE 数据库名;

执行成功提示:Database changed

⚠️ 重要:所有建表、改表操作前,必须先 use 选中数据库,否则报 No database selected

4. 删除数据库

语法:

sql

复制代码
DROP DATABASE [IF EXISTS] 数据库名;

示例:

sql

复制代码
DROP DATABASE IF EXISTS db_demo;
  • IF EXISTS:库不存在也不会报错,安全删除。

DDL 数据库操作速记

sql

复制代码
SHOW DATABASES;          -- 查所有库
CREATE DATABASE 库名;     -- 创建库
USE 库名;                 -- 使用库
SELECT DATABASE();        -- 查看当前库
DROP DATABASE 库名;       -- 删除库

三、DDL 表操作(操作数据表)

3.1 基础查询表语句

sql

复制代码
-- 查询当前库下所有数据表
SHOW TABLES;

-- 查看表结构(字段、类型、注释、主键等)
DESC 表名;

-- 查看建表完整SQL(包含引擎、字符集、注释)
SHOW CREATE TABLE 表名;

3.2 MySQL 常用数据类型

1)数值类型

表格

类型 说明 使用场景
TINYINT 极小整数 年龄、状态(搭配 UNSIGNED 无负数)
SMALLINT 小整数 少量数字标识
INT 常规整数 主键 ID、编号
BIGINT 大整数 超大 ID、雪花 ID
FLOAT/DOUBLE 浮点数 小数(金额推荐用 DECIMAL,避免精度丢失)

示例:age TINYINT UNSIGNED COMMENT '年龄'(无负数年龄)

2)字符串类型

表格

类型 特点 使用场景
CHAR(长度) 定长字符串,空间固定、查询性能高 固定长度内容:性别 (1)、身份证 (18)
VARCHAR(长度) 变长字符串,节省空间、性能略低 不固定长度:姓名、用户名、工号

示例:

  • gender CHAR(1) COMMENT '性别'
  • username VARCHAR(30) COMMENT '用户名'
3)日期时间类型

表格

类型 作用 场景
DATE 仅日期(年月日) 生日、入职日期
TIME 仅时间(时分秒) 时长、时间段
YEAR 仅年份 出生年份
DATETIME 日期 + 时间 完整记录时间
TIMESTAMP 时间戳 自动更新创建 / 修改时间

示例:entrydate DATE COMMENT '入职时间'

3.3 创建数据表 CREATE TABLE

标准语法

sql

复制代码
CREATE TABLE 表名 (
    字段1 数据类型(长度) [COMMENT '字段注释'],
    字段2 数据类型(长度) [COMMENT '字段注释'],
    ...
) [ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '表注释'];

注意坑:字段分隔必须用英文半角逗号 , ,中文逗号 直接报语法错误!

实战示例:员工表 emp

sql

复制代码
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 '入职时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '员工表';

3.4 修改表结构 ALTER TABLE

1)新增字段 ADD

sql

复制代码
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT '注释'] [约束];

示例:给员工表新增昵称字段

sql

复制代码
ALTER TABLE emp ADD nickname VARCHAR(20) COMMENT '昵称';
2)仅修改字段数据类型 MODIFY

只改类型 / 长度,不改字段名

sql

复制代码
ALTER TABLE 表名 MODIFY 字段名 新类型(长度) [COMMENT '注释'];

示例:将姓名长度改为 20

sql

复制代码
ALTER TABLE emp MODIFY name VARCHAR(20) COMMENT '姓名';
3)修改字段名 + 字段类型 CHANGE

语法:CHANGE 旧字段名 新字段名 类型(长度) [注释]

sql

复制代码
ALTER TABLE emp CHANGE nickname username VARCHAR(30) COMMENT '用户名';

易错点:注释引号必须成对,错误写法 comment ''用户名 会报语法异常,正确 comment '用户名'

4)删除字段 DROP

sql

复制代码
ALTER TABLE 表名 DROP 字段名;

示例:删除用户名字段

sql

复制代码
ALTER TABLE emp DROP username;
5)修改表名 RENAME TO

sql

复制代码
ALTER TABLE 旧表名 RENAME TO 新表名;

示例:ALTER TABLE emp RENAME TO employee;

3.5 删除数据表

  1. 普通删除表(表不存在会报错)

sql

复制代码
DROP TABLE [IF EXISTS] 表名;

安全写法:

sql

复制代码
DROP TABLE IF EXISTS emp;
  1. 清空表数据(保留表结构)TRUNCATE

sql

复制代码
TRUNCATE TABLE emp;

作用:清空表里所有数据,自增主键重置,表结构不变。

DDL 表操作速记

sql

复制代码
SHOW TABLES;                          -- 查询所有表
DESC 表名;                            -- 查看表结构
SHOW CREATE TABLE 表名;               -- 查看建表语句
CREATE TABLE 表名(字段...) COMMENT ''; -- 创建表
ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME TO ...; -- 修改表
DROP TABLE IF EXISTS 表名;            -- 删除表
TRUNCATE TABLE 表名;                  -- 清空表数据,保留结构

四、易错总结

  1. 中文符号报错 :逗号、引号必须是英文半角,'' 全角符号直接语法错误;
  2. 未选中数据库 :建表 / 改表前必须执行 use 库名;,否则 No database selected
  3. 注释引号不匹配comment ''用户名 少闭合引号,正确 comment '用户名'
  4. 字符集乱码 :建表务必加 DEFAULT CHARSET=utf8mb4,支持完整中文和表情;
  5. 删除不加 IF EXISTS :生产环境创建 / 删除库表建议带上 IF NOT EXISTS/IF EXISTS,避免重复执行报错。
相关推荐
海兰3 小时前
【数据库】tdsql(mysql8.0)优化思考三
数据库·redis
煎饼学大模型4 小时前
Agent 的“大脑-手“解耦架构:当推理层和工具执行层各自独立演进
数据库·人工智能·oracle·架构·agent
Lucifer三思而后行4 小时前
Veeam 备份 Oracle RAC 失败,是归档删除脚本的锅!
sql
暖和_白开水6 小时前
数据分析agent(十三_3):docker mysql容器镜像服务的异常错误
mysql·docker·容器
muddjsv7 小时前
SQLite数据库文件机制详解:journal、wal、shm文件作用与备份避坑
数据库·sqlite
吴声子夜歌8 小时前
MongoDB 4.2——应用程序设计
数据库·mongodb
数字新视界8 小时前
动环监控可视化在数据中心管理中的应用与实践解析
数据库·物联网·解决方案·动环监控·大榕树
极地野狼 音乐哔哔8 小时前
数据库备份恢复的原理实践
数据库
互联网中的一颗神经元9 小时前
小白python入门 - 25. SQL 与表设计入门
数据库·python·sql
ttwuai9 小时前
AI 生成后台改数据后,操作日志别只记按钮:Go + MySQL 怎么验
数据库·人工智能·mysql·golang