一、SQL语句基础
1.SQL简介
定义:结构化查询语言(Structured Query Language),关系型数据库的标准操作语言,用于数据操作、检索、维护。
能力覆盖: 改变数据库结构(如建库、删表 )、调整安全设置(权限、用户 )、 增删用户权限、检索/更新数据库信息。
2.SQL语句分类
分类 | 全称 | 作用 | 关键命令 |
---|---|---|---|
DDL | 数据定义语言 | 定义数据库对象(库、表、列、索引等 ) | CREATE、DROP、ALTER、RENAME、 TRUNCATE |
DML | 数据操作语言 | 操作数据库记录(增、删、改 ) | INSERT、DELETE、UPDATE |
DQL | 数据查询语言 | 检索数据库信息(查数据 ) | SELECT |
DCL | 数据控制语言 | 管理权限、安全级别(用户/库/字段权限 ) | GRANT、REVOKE |
DTL | 事务控制 | 保障数据一致性(提交、回滚事务 ) | COMMIT、ROLLBACK、SAVEPOINT |
3.SQL书写规范
(1)在数据库系统中,SQL语句不区分大小写(建议用大写) ,但字符串常量区分大小写
(2)SQL语句可单行或多行书写,以“;”结尾。
(3)关键词不能跨多行或简写。
(4)用空格和缩进来提高语句的可读性。
(5)子句通常位于独立行,便于编辑,提高可读性
(6)/* */ 为多行注释 -- 和 # 为单行注释
二、数据库的操作语句
1.数据库的登录和退出
(1)登录格式:mysql -u用户名 -h主机地址 -p密码 -A -P端口 -D数据库名 -e sql语句
参数 | 说明 | 必写性 |
---|---|---|
-u | 指定登录用户名(如 root ) | 必写,无默认值 |
-h | 服务器主机地址 | 同机可不填,默认 localhost |
-p | 登录密码(-p 与密码间无空格,如 -p123456 空格则需交互输入 ) | 无密码时可省略 -p |
-A | 不预读数据库信息(加速登录,关闭表名/列名自动补全 ) | 可写,默认预读 |
-P | 数据库端口(默认 3306 ,非默认时需指定 ) | 可写,默认3306 |
-D | 登录后直接进入的数据库名 | 可写,无默认 |
-e | 登录后直接执行 SQL 语句(如 -e "SELECT VERSION();" | 可写,常用于脚本 |
(2)交互流程:
显示信息解释:
Commands end with; or\g: mysql 命令是以分号(;)或“\g”来结束的,遇到这个结束符就开始执行命令。
Your MySQL connection id is 26: 数据库的连接次数。
Server version: 8.0.42 MySQL Community Server : 版本
Type 'help;' or '\h' for help: 输入”help;“或者”\h“可以看到帮助信息
Type '\c' to clear the current input statement: 表示遇到”\c“就清除前面的命令,注意不是清屏
(3)退出操作:
在MySQL>终端中,执行以下命令可退出:exit quit \q
(4)其他操作:
\! cls 和 \! clear 调用window的命令 或者 system cls 清屏
\? 获取关键字的语法
\d 指定sql默认结束字符
\c 清空当前命令行,不执行当前命令
\!调用系统指令
\q 退出
2.查看数据库
(1)基础查看:show databases [like 条件]; (无 like 条件时显示所有数据库。且 like 用于模糊查询,% 匹配任意长度字符, _ 匹配任意单个字符 )
仅筛选名称完全等于 sys 的数据库:
匹配以 s 开头,后续任意字符的数据库 :
(2)查看当前系统时间:select now(); (获取MySQL服务器所在系统的当前时间,含日期、时分秒)
(3)查看数据库版本:select version(); (查询当前服务器的版本号)
3.创建数据库
(1)基础创建:create database 数据库名;
若数据库已存在,执行会报错:
(2)查看创建数据库的语句:show create database 数据库名;
上述显示创建数据库语句的内容可看做3段内容:
CREATE DATABASE `s` :表示创建数据库
/*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ :表示注释内容,显示字符集采用utf8mb4方案,一个字符需要 1 ~ 4 个字节。可以存储一些 emoji 表情; utf8mb4_0900_ai_ci表示字符比较规则即ai为不区分重音,ci为不区分大小写
/*!80016 DEFAULT ENCRYPTION='N' */ 表示数据库未加密
4.MySQL中的反引号
(1)反引号(`)的作用:解决标识符(表名、列名等)与SQL关键字冲突。即当表名或列名和 SELECT 、 TABLE 等关键字重名时,用反引号包裹可避免报错。
(2)使用原则:普通标识符(无关键字、特殊字符)可不用,但为规范建议加上; 涉及保留关键字、特殊字符(如含空格、下划线等)时必须加。
5.切换数据库
(1)查看当前的数据库:select database(); (返回当前会话正在使用的数据库名;若未选择任何数据库,结果为NULL)
(2)选择数据库:use 数据库名(); (将当前会话的操作目标切换到指定数据库,后续操作默认在此库执行)
6.查看当前用户
(1)语句:select user(); (返回当前登录MySQL的用户名及主机信息)
7.删除数据库
(1)drop database 数据库名; (永久删除指定数据库。含数据库中所有表,数据,操作不可逆)
三、MySQL字符集
1.核心概念
(1)MySQL字符集包括字符集(CHARACTER)和排序规则(校对规则)(COLLATION)两个关联概念
字符集:规定字符的编码、存储方式(占多少字节、支持哪些字符 ),决定“能存什么内容”。
不同的字符集有不同的编码规则,在运维和使用MySQL数据库中,选取合适的字符集非常重要,如果选择不恰当,轻则影响数据库性能,严重的可能导致数据存储乱码
排序规则:定义字符的比较、排序规则(如字母大小写谁大谁小 ),决定“怎么比大小、排序”。
字符集 | 支持字符范围 | 说明 |
---|---|---|
latin1 | 西欧、希腊等字符 | MySQL 5.7 及更早版本的默认字符集,对中文等支持差 |
gbk | 中文简体字符 | 仅支持中文简体,非国际通用,纯中文场景可考虑性能 |
big5 | 中文繁体字符 | 主要用于中国台湾地区繁体中文存储 |
utf8 | 原“utf8”别名(已被弃用) | 最多存 3 字节字符,无法支持 emoji 等特殊符号,避免使用 |
utf8mb4 | 完全兼容 UTF-8,支持 emoji | MySQL 8.0 默认字符集,国际通用,推荐生产环境使用 |
(2)MySQL数据库在开发运维中,字符集选用规则如下:
如果系统开发面向国外业务,需要处理不同国家、不同语言,则应该选择utf-8或者utf8mb4
如果需要支持中文,没有国外业务,则为了性能考虑,可以采用GBK
(3)字符序:决定字符排序、比较的规则
utf8mb4_general_ci (不区分大小写, A 和 a 视为相等 );
若需区分大小写,可用 utf8mb4_bin (按二进制编码比较, A ≠ a )。
2.字符集操作
(1)查看所有支持的字符集:
表格形式显示
show character set;
Charset(字符集名称)
Description(描述)
Default collation(默认字符序)
Maxlen(最大存储长度)
注:\g可替代分号
纵向显示
show character set \G (适合字段多的场景,用\G代替分号)
(2)查看指定字符集:show character set like '字符集'; (用 like 模糊匹配,精准筛选目标字符集)
3.查看MySQL字符序
(1)命名规则:
前缀:对应字符集名称(如 utf8mb4 开头的字符序,关联 utf8mb4 字符集 )
中间:国家名(如 chinese )或 general (通用规则 );
后缀:表示比较规则,常见后缀及含义:
后缀 | 含义 | 示例场景 |
---|---|---|
bin | 二进制比较(区分大小写) | 密码存储、严格区分大小写场景 |
ci | 大小写不敏感(A=a) | 普通文本搜索(如姓名、标题) |
cs | 大小写敏感(A≠a) | 代码关键字匹配(如变量名区分) |
ai | 口音不敏感(忽略重音) | 多语言文本统一排序(如法语 `é` 等同 `e` ) |
as | 口音敏感 | 需严格区分重音的场景(如语言学研究 ) |
(2)查看所有字符序:show collation;
或按字符集筛选:show collation where charset = “utf8mb4”;
字段含义:
Collation:字符序名称
Charset:该字符序关联的字符集
Id:字符序ID
Default:该字符序是否是所关联的字符集的默认字符序。armscii8_general_ci就是armscii8的默认字符序,而armscii8_bin就不是
Compiled:字符集是否已编译到服务器中
Sortlen:这与对以字符集表示的字符串进行排序所需的内存量有关
Pad_attribute:这表明了字符序在比较字符串时对末尾padding的处理。NO PAD表明在比较字符串时,末尾的padding也会考虑进去,否则不考虑
4.查看当前字符集的设置
(1)查看字符集相关变量:show variables like 'character_set%';
变量含义:
character_set_client:MySQL客户端的字符集
character_set_connection:数据通信链路字符集,当MySQL客户机向服务器发送请求时,请求数据以该字符集进行编码
character_set_database:数据库默认使用的字符集
character_set_filesystem:MySQL服务器文件系统字符集,该值是固定的binary
character_set_results:服务器返回给客户端的结果使用的字符集
character_set_server:服务器默认的字符集
character_set_system:服务器存储元数据使用的字符集
5.utf8和utf8mb4的核心区别
(1)设计目标:
utf8(实际是 utf8mb3 别名 ):MySQL 早期实现,最多存 3 字节 字符,覆盖大部分 Unicode 基本平面(BMP )字符(如常见中文、英文 ),但无法存储 4 字节字符(如 Emoji 表情、罕见汉字 )。
utf8mb4 :MySQL 5.5.3+ 新增,支持 4 字节 字符,完全兼容 UTF-8 标准,可存储 Emoji、新 Unicode 字符。
(2)选择建议:
必选 utf8mb4 场景:需存储 Emoji、罕见汉字(如古籍用字 )、新 Unicode 字符,或面向国际多语言业务(避免字符截断/乱码 )。
兼容历史场景:若旧系统依赖 utf8 且无 4 字节字符需求,可保留;但 MySQL 8.0 后推荐统一迁移到 utf8mb4 (官方更优先维护 )。