当前位置: 首页 > news >正文

MySQL——库的操作

1、创建数据库

语法:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

这里的CHARACTER SET表示指定数据库采用的字符集

COLLATE 表示指定数据库字符集的校验规则

2、字符集和字符集校验规则

字符集

字符集是一套符号和编码的集合。它定义了数据库可以存储哪些字符,以及如何将这些字符转换为二进制数据存储到计算机中。

通俗解释:
你可以把字符集想象成一本“密码本”。这本密码本规定了:

  • 有哪些字符:比如字母 Aa,中文 ,表情符号 😊 等。

  • 每个字符对应的编号(编码)是什么:比如在 ASCII 字符集中,字母 A 的编号是 65(二进制是 01000001

常见字符集:

  • ASCII:最早的英文字符集,包含英文字母、数字和一些控制字符,共128个字符。

  • ISO-8859-1 (Latin-1):扩展了 ASCII,加入了西欧语言字符,如 ñçö 等。

  • GB2312 / GBK / GB18030:中国国家标准,用于存储简体中文字符。GBK 是 GB2312 的扩展,GB18030 是更全面的扩展。

  • BIG5:繁体中文标准,主要用于台湾、香港等地。

  • UTF-8当今最重要的字符集。它是 Unicode 标准的一种可变长度实现,可以表示世界上几乎所有语言的字符,包括大量表情符号和特殊符号。它是国际化的首选。

为什么重要
如果字符集设置不正确,就会出现“乱码”。例如,如果你用 GBK 编码去解码一段用 UTF-8 存储的中文文本,显示出来的就是一堆无法识别的字符。

字符集校验规则

至于校验规则是在字符集内,用于比较和排序字符的一套规则。它定义了字符如何被比较、排序以及是否区分大小写和重音。

通俗解释
字符集定义了“有什么字”,而校验规则定义了“这些字怎么排顺序、怎么算相等”。
比如,有一组单词:appleAppleBanana

  • 如果使用区分大小写的校验规则,排序可能是:AppleBananaapple(根据 ASCII 码,大写字母在前)。

  • 如果使用不区分大小写的校验规则,排序可能是:appleAppleBananaa 和 A 被视为相同,按下一个字母排序)。

校验规则通常包含以下信息

  1. 是否区分大小写(Case Sensitivity)A 和 a 是否相同?

    • _cs (case sensitive):区分

    • _ci (case insensitive):不区分

  2. 是否区分重音(Accent Sensitivity)a 和 á 是否相同?

    • _as (accent sensitive):区分

    • _ai (accent insensitive):不区分

  3. 其他规则,如是否区分空格等。

常见校验规则(以 MySQL 的 utf8mb4 字符集为例)

  • utf8mb4_general_ci:一种较老的校验规则,排序精度不高但速度快。不区分大小写。

  • utf8mb4_unicode_ci:基于 Unicode 标准进行排序和比较,能更准确地处理各种语言的排序(如德语中的 ß),速度稍慢。不区分大小写。推荐使用

  • utf8mb4_0900_ai_ci:MySQL 8.0 引入的,基于更现代的 Unicode 9.0 标准,比 unicode_ci 更精确和高效。不区分重音,不区分大小写。

  • utf8mb4_bin:将每个字符直接根据其二进制编码进行比较。这意味着它区分大小写和重音A (0x41) 和 a (0x61) 是不同的。

具体使用

先来看看MySQL数据库都支持哪些字符集和校验规则

查看数据库支持的字符集

show charset;

这是表格一部分,可以在其中找到utf8字符集

查看数据库支持的字符集校验规则

show collation;

 首先创建一个数据库

注:这里创建数据库时没有指名字符集和字符集校验规则时,默认字符集就是utf8,校验规则就是

utf8_ general_ ci(utf8_general_ci不会区分大小写)

然后在库里创建一个表,并插入若干个数据,最后查询一下

这是表里现有的数据,那么如果查一下字符’a‘呢?

可以发现并没有区分大小写

那如果是进行排序呢?

结果显而易见。

然后再来创建一个数据库test_db1,这时选用utf8_bin(区分大小写)校验规则

然后来查询一下字符‘a'以及进行排序

上面还用到了两个没见过的子句

where 和 order by

where子句

功能:用来过滤行,决定哪些数据行能进入结果集。

用法:

select 列名
from 表名
where 条件表达式;

特点

  • 在数据返回之前就执行过滤。

  • 支持比较运算符(=, >, <, >=, <=, <>)、逻辑运算符(AND, OR, NOT)、范围(BETWEEN)、集合(IN)、模式匹配(LIKE)、空值判断(IS NULL)等。

order by 子句

功能:用来对结果集排序,不影响数据存储顺序,只是展示时排序。

用法:

select 列名
from 表名
order by 列名 [asc|desc];
  • asc 升序(默认)。

  • desc 降序。

特点:

  • 只能排在整个 SQL 的最后(limit 之前也可以)。

  • 可以按多个字段排序。

  • 排序规则受 collation(排序规则) 影响,比如 utf8_general_ci 大小写不敏感,utf8_bin 大小写敏感。

操纵数据库

显示创建语句

show create database 数据库名;

说明:

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default.... */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

修改数据库

语法:

ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name

对数据库的修改主要指的是修改数据库的字符集,校验规则

这里修改一下test_db1数据库的字符集

可以看到,默认执行的语句变了

数据库删除

语法:

DROP DATABASE [IF EXISTS] db_ name;

执行删除之后的结果:

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

注意:不要随意删除数据库

数据库备份

 mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

将test_db1备份到root目录下的MySQL目录里

注:这是在shell里面输入,而不是在mysql里

这下可以在相关目录里看见备份的文件了

如果再查看一下备份文件的内容呢?

会发现原来是一串之前输入过的mysql语句

那么既然已经备份了就可以删除mysql里面的库文件了

现在还原一下删除的库

这次是在mysql客户端里输入

source 相关路径/mytest.sql;

可以看到有很多语句被执行的提示

查看库里都存在的表

show tables;

查看表的结构

desc 表名;

这样删除的库就被还原了

如果备份的不是整个数据库,而是其中的一张表,怎么做?

# mysqldump -u root -p 数据库名 表名1 表名2 > 路径

同时备份多个数据库

# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原

查看连接情况

show processlist

可以看到目前只有我一个root用户在连接数据库


文章转载自:

http://N3pbbg8c.xcjbk.cn
http://2XLTjVXj.xcjbk.cn
http://RPB8bJ9R.xcjbk.cn
http://ZOJWsyNl.xcjbk.cn
http://aWztklN2.xcjbk.cn
http://esvnggYh.xcjbk.cn
http://VPbLCX5K.xcjbk.cn
http://KdeeO1Yk.xcjbk.cn
http://u8jl6mqQ.xcjbk.cn
http://1ik3QOtP.xcjbk.cn
http://QtM8rkdd.xcjbk.cn
http://R3CF9wsR.xcjbk.cn
http://DZaEUVGm.xcjbk.cn
http://ZbeplOyO.xcjbk.cn
http://uuKYjTP5.xcjbk.cn
http://hNyLQ7wF.xcjbk.cn
http://1BVJ87Kt.xcjbk.cn
http://nVIh8crj.xcjbk.cn
http://LC91FynP.xcjbk.cn
http://94QKoI0C.xcjbk.cn
http://8MGMbRXC.xcjbk.cn
http://AReoeQ4U.xcjbk.cn
http://0mSuqvA5.xcjbk.cn
http://haa2vci3.xcjbk.cn
http://ioBJl4sY.xcjbk.cn
http://5owwqtQ6.xcjbk.cn
http://MLuTdgNy.xcjbk.cn
http://cbQQxWtS.xcjbk.cn
http://vhYpez7z.xcjbk.cn
http://QPHpbKEz.xcjbk.cn
http://www.dtcms.com/a/383704.html

相关文章:

  • Redis缓存的常见问题及其解决方案
  • Conda 安装 CUDA Toolkit 解决 nvcc 找不到的问题
  • (二)Django框架常用配置
  • Android开发-数据库SQLite
  • (附源码)基于springboot的幼儿园管理系统
  • 【从零到公网】本地电脑部署服务并实现公网访问(IPv4/IPv6/DDNS 全攻略)
  • VTK基础(01):VTK中的基本概念
  • Sentinel:微服务架构下的高可用流量防卫兵
  • Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
  • OpenCV:指纹识别
  • map/multimap容器
  • leetcode 966. 元音拼写检查器 中等
  • esp32程序存储结构--自用笔记版
  • leetcode 21 合并两个有序链表
  • OneCode 移动套件多平台适配详细报告
  • RAGAS新手入门教程:从基础到实践
  • 在 CentOS 中安装 VirtualBox 增强功能的步骤
  • 网络编程-day4
  • 学习笔记:第一个Python程序
  • Docker-compose.yml集群设置
  • 课后作业-2025-09-14
  • 软件工程实践一:Git 使用教程(含分支与 Gitee)
  • 知识贡献缺乏激励该如何改善
  • 一个冷门算法——Floyd判圈算法在Leetcode中的应用
  • 程晓明在链改 2.0 六方会谈首提 “双众筹 + 私交所” 回应 RWA 国内落地可行方案
  • 【车载audio开发】【基础概念1】【音频基础概念通俗讲解】
  • O3DE社区发布2505.0版本
  • VSCode 的 Run and Debug 下拉菜单都是怎么配置的,原理是什么?
  • Ligero 和 Brakedown PCS中的tensor product结构
  • 高效群签名方案与优化方法