MySQL建库命令总结(含练习)

0. 先建立整体认知

复制代码
登录 MySQL  →  建库/选库  →  建表(列 + 类型 + 约束)  →  改表  →  删表/删库

命令按操作对象分成三层,记住这个结构就不会乱:

|-----|----------|-----------------------------------------------------------------------------|
| 层级 | 操作对象 | 核心关键字 |
| 第一层 | 数据库(库) | CREATE DATABASE / DROP DATABASE / USE / SHOW DATABASES |
| 第二层 | 表结构(壳) | CREATE TABLE / DROP TABLE / ALTER TABLE / SHOW TABLES / DESC |
| 第三层 | 列的约束(规矩) | NOT NULL / DEFAULT / PRIMARY KEY / UNIQUE / FOREIGN KEY / CHECK |

一条铁律 :SQL 语句不区分大小写(建议关键字大写),但字符串常量区分大小写 ;每条语句必须以 ; 结尾。


1. 进门:登录与退出

复制代码
# 1. 先启动服务(不启动会报 ERROR 2002 找不到 socket)
[root@server ~]# systemctl start mysqld

# 2. 登录(推荐:-p 后不写密码,回车后再输入,安全)
[root@server ~]# mysql -u root -p

# 3. 完整格式
mysql -u 用户名 -h 服务器主机地址 -p密码

参数拆解:

|------|---------------------------|------------------------------------|
| 参数 | 含义 | 注意 |
| -u | 用户名,如 root | |
| -h | 主机地址,本机写 localhost 或 IP | 本机可省略 |
| -p | 密码 | -p 与密码之间不能有空格,否则空格后的内容不会被当密码 |

复制代码

明文写密码登录会警告:Using a password on the command line interface can be insecure.


2. 数据库(库)操作

2.1 查看数据库

复制代码
SHOW DATABASES;                    -- 注意有 s,查看所有库
SHOW DATABASES LIKE 'sys';         -- 按条件查看
SHOW DATABASES LIKE 's%';          -- % 匹配任意 0 个或多个字符
SHOW DATABASES LIKE '__sql';       -- _ 匹配任意单个字符 → 命中 mysql

自带的 4 个系统库,别乱动:

|----------------------|----------------------------|
| 库名 | 作用 |
| information_schema | 数据字典,存所有库/表/列/权限等元信息 |
| performance_schema | 服务器性能参数 |
| mysql | 用户、权限、帮助信息 |
| sys | 以视图方式把上面两个库包装成易读数据(5.7 新增) |

常用环境查看命令:

复制代码
SELECT NOW();        -- 当前时间
SELECT VERSION();    -- 数据库版本
SELECT USER();       -- 当前登录用户及主机,如 root@localhost
SELECT DATABASE();   -- 当前正在使用的库,未选库时为 NULL

2.2 创建数据库

复制代码
CREATE DATABASE testdb;                                  -- 最简写法
CREATE DATABASE IF NOT EXISTS testdb;                    -- 不存在才建,不报错
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;  -- 指定字符集

SHOW CREATE DATABASE testdb\G                            -- 回看建库语句(\G 竖排显示,防折行)

解读建库语句的输出:

复制代码
CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
  • testdb:反引号,防止与关键字冲突
  • utf8mb4:字符集,1~4 字节,支持 emoji
  • utf8mb4_0900_ai_ci:ai=不区分重音,ci=不区分大小写
  • ENCRYPTION='N':未加密

2.3 切换数据库

复制代码
USE testdb;            -- 切换(此句可不加分号)
SELECT DATABASE();     -- 确认当前库

建表前必须 USE 库名,否则报 No database selected。

2.4 删除数据库

复制代码
DROP DATABASE testdb;

删除前一定先备份,删库是不可逆操作。

复制代码

3. 字符集与排序规则(建库必懂)

字符集 = 怎么存 ;字符序(COLLATION)= 怎么比大小、怎么排序。

复制代码
SHOW CHARACTER SET;                    -- 查看所有支持的字符集
SHOW CHARACTER SET LIKE 'utf%';        -- 模糊查看
SHOW COLLATION;                        -- 查看所有字符序
SHOW VARIABLES LIKE 'character_set%';  -- 查看当前字符集设置

关键变量:

|----------------------------|------------|
| 变量 | 含义 |
| character_set_client | 客户端字符集 |
| character_set_connection | 通信链路字符集 |
| character_set_database | 数据库默认字符集 ★ |
| character_set_results | 返回结果的字符集 |
| character_set_server | 服务器默认字符集 ★ |

字符序命名后缀:

|-------------|--------------------------|
| 后缀 | 含义 |
| bin | 二进制比较 |
| ci | 大小写不敏感(case insensitive) |
| cs | 大小写敏感 |
| ai / as | 不区分 / 区分重音 |
| ks | 假名敏感 |

utf8 vs utf8mb4(重点):

  • MySQL 的 utf8 其实是 utf8mb3,最长 3 字节,存不下 emoji、生僻汉字
  • utf8mb4 = most bytes 4,是 utf8 的超集,8.0 默认,推荐一律用它
  • 5.7 默认 latin1,8.0 默认 utf8mb4

4. 命名规范(生产环境习惯)

通用规则:

  • 用有意义的英文词汇,中间以下划线分隔
  • 只能由字母、数字、#、_、$ 组成,必须以字母开头
  • 不用 MySQL 保留字;统一小写

库: 项目名 + 库含义简写,不超过 30 字符,如 im_flow

表:

|-----|-----------------------|------------------------------|
| 类型 | 规则 | 示例 |
| 常规表 | t_ + 模块 + 表含义 | t_user_eduinfo |
| 临时表 | temp_ + 模块 + 表 + 日期 | temp_user_eduinfo_20240520 |
| 备份表 | bak_ + 模块 + 表 + 日期 | bak_user_eduinfo_20231219 |


5. 数据类型(建表的积木)

5.1 整型

|-------------|----|---------------------------|-----------------|
| 类型 | 字节 | 有符号范围 | 无符号范围 |
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
| INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
| BIGINT | 8 | 很大 | 更大 |

只存 0/1 的枚举字段用 TINYINT 就够,用 BIGINT 是浪费(100 万行白扔约 6.7MB)。 int(10) 里的 10 只是显示宽度 ,int 永远占 4 字节,8.0.17 后已不推荐该写法。 加 UNSIGNED 表示无符号(如 age INT UNSIGNED)。

5.2 浮点型与定点型

|----------------|-----|---------------------|
| 类型 | 字节 | 说明 |
| FLOAT(M,D) | 4 | 单精度,存近似值 |
| DOUBLE(M,D) | 8 | 双精度,存近似值 |
| DECIMAL(M,D) | --- | 定点型,以字符串存,无精度丢失 |

复制代码

5.3 文本型

|---------------------------|--------------------------------|
| 类型 | 说明 |
| CHAR(size) | 定长字符串,最多 255,不足补空格 → 适合手机号、身份证 |
| VARCHAR(size) | 变长字符串 → 长度不固定时用它 |
| TINYTEXT | 最大 255 字符 |
| TEXT | 最大 65,535 字符 |
| MEDIUMTEXT / LONGTEXT | 更大文本 |
| BLOB 系列 | 二进制大对象,无字符集和排序规则 |
| ENUM('x','y','z') | 枚举,最多 65535 个值 |
| SET | 可存多个值,最多 64 个列表项 |

BLOB 二进制存储无排序规则;TEXT 字符形式存储有字符集和排序规则,适合文章、评论。

5.4 日期时间型

|-------------|----|-----------------------------|
| 类型 | 字节 | 格式 |
| DATE | 3 | yyyy-MM-dd |
| TIME | 3 | HH:mm:ss |
| YEAR | 1 | yyyy |
| DATETIME | 8 | yyyy-MM-dd HH:mm:ss |
| TIMESTAMP | 4 | yyyy-MM-dd HH:mm:ss,可作时间戳 |


相关推荐
Zhang~Ling2 小时前
Redis 基础教程:从常用命令到实际业务场景
数据库·redis·缓存
ss2733 小时前
30 PostgreSQL ACID特性详解
数据库·postgresql
syagain_zsx3 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
时间售卖铺4 小时前
MySQL 备份
运维·数据库·mysql·云原生
靠谱的工程师朋友4 小时前
电子会计档案管理软件科普 核心能力与选型要点解析
网络·数据库·人工智能·电子会计档案
北冥you鱼4 小时前
Go 语言 Ticker 定时任务全解析:原理、陷阱与最佳实践
开发语言·数据库·golang
花间相见4 小时前
【计算基础|MySQL17】三大日志:undo / redo / binlog
数据库·后端·面试
严同学正在努力4 小时前
PostgreSQL 数据库安装部署教程(Linux 多发行版 + Windows + Docker 全覆盖)
linux·数据库·postgresql
众链网络4 小时前
年卡跨淡旺季的有效期模型:不可用日期、次数与顺延规则
java·前端·数据库