MySQL笔记2

发布于:2025-07-20 ⋅ 阅读:(21) ⋅ 点赞:(0)

一、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 (官方更优先维护 )。


网站公告

今日签到

点亮在社区的每一天
去签到