【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,避免重复执行报错。
相关推荐
2601_963771371 小时前
Speeding Up Creative Agency Portfolios: A Performance Guide
前端·数据库·php
运维大师1 小时前
【安全与故障排查】03-【复盘】数据库被入侵:从发现到溯源全过程
数据库·安全·adb
Quincy_Freak3 小时前
银河麒麟 SQLite 实操:Excel 导入与 SQL 语法编辑功能详解摘要
数据库·arm·数据库管理·大数据分析·银河麒麟·aarch64·sqlitego
七夜zippoe3 小时前
OpenClaw 数据加密:敏感信息保护的完整方案
数据库·mysql·php·openclaw·敏感保护
万亿少女的梦1683 小时前
基于Node.js和Express的旅游信息管理平台设计与开发
mysql·node.js·express·系统设计·旅游信息管理
Dovis(誓平步青云)3 小时前
《C/C+++ Boost 轻量级搜索引擎实战:架构流程、技术栈与工程落地指南——HTML文件的清洗(上篇)》
开发语言·数据库·c++·搜索引擎·开源
蚁库5 小时前
Oracle 12c + ASM + UDEV 实战教程:从磁盘规划到日常管理,10节视频完整通关
数据库·oracle
云和恩墨14 小时前
数据库一体机简史:从ODA到zData X,命名之中的玄机
数据库·vr
万亿少女的梦16814 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue