MYSQL之库的操作

创建数据库

语法很简单, 主要是看看选项(与编码相关的):

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

1. 语句中大写的是关键字
2. [] 内的是可选项
3.  CHARACTER SET: 指定数据库采用的字符集
4. COLLATE: 指定数据库字符集的校验规则

1. 创建一个数据库最简单的命令为: create database db_name; --本质是在/var/lib/mysql/下创建一个目录:

反过来, 在 mysql5.5下, 手动在该目录下创建一个目录, mysql 可以查询到对应目录名的数据库. 但不应该这样创建数据库. 在 mysql 8 这样做就不行了, 因为它采用 data dictionary(数据字典)去维护数据库.

2. create database if not exist db_name, 如果要创建的数据库存在就不创建, 已经存在的数据库没有必要创建.

3.  数据库编码问题, 创建数据库时有两个编码集: 数据库字符集和数据库校验集        

1. 数据库字符集(编码集) 是 未来存储数据用的字符集
2. 数据库校验集 是 为了支持数据库进行字段比较所使用的编码, 本质是一种读取数据库中数据所采用的编码格式.

因此, 无论数据库对数据做任何操作, 都必须保证操作和编码是一致的. 

a. 当我们创建数据库没有指定字符集和校验规则时, 系统使用默认字符集: utf8, 校验规则是:utf8_ general_ ci. 这里我们的 my.cnf 配置为了 character-set-server=utf8mb4, 所以 mysql 的默认字符集以及校验规则为: utf8mb4 和 utf8mb4_0900_ai_ci.

MySQL 在早期(如 5.5 及更早)中的 utf8 实际指的是 utf8mb3,无法存储某些 Unicode 字符,  utf8mb4 是UTF-8完全体, 支持所有 Unicode 字符(包括 emoji, 部分罕见汉字等)

查看系统默认字符集以及校验规则:

show variables like 'character_set_database';
show variables like 'collation_database';

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

show charset;
show collation;

show charset 的部分条目:

 b. 现在我们可以手动创建两个数据库:

create database d1;
create database d2 charset=gbk colloate gbk_chinese_ci;

注意这里 charset=gbk 可以写成 character set gbk

了解: MYSQL 5.5 下可以通过  cat /var/lib/mysql/db_name/db.opt 去查看数据库的配置选项. 而MySQL 8.0 中, 关于数据库的配置信息(如字符集和校验规则)现在存储在 数据字典表 mysql.schema 中, 该表存储了数据库的元数据:

SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM INFORMATION_SCHEMA.SCHEMATA;

INFORMATION_SCHEMA.SCHEMATA 视图专门用于存储有关 所有数据库(schema) 的信息 

 c. 校验规则对数据库的影响

现在创建两个数据库d1 d2, 分别为 utf8mb4_0900_ai_ci 和 utf8mb4_bin, 前者不区分大小写, 后者区分大小写. 

一. SELECT显式查询以及结果

然后在数据库插入几个表供查询演示.

1. d1 使用默认字符集 utf8mb4_0900_ai_ci 不区分大小写: 

use d1
create table person(name varchar(20));
insert into person (name) values ('A');
insert into person (name) values ('a');
insert into person (name) values ('B');
insert into person (name) values ('b');
insert into person (name) values ('C');

 2. d2 使用 utf8mb4_bin, 区分大小写:

use d2
create table person(name varchar(20));
insert into person (name) values ('A');
insert into person (name) values ('a');
insert into person (name) values ('B');
insert into person (name) values ('b');
insert into person (name) values ('C');

在使用数据库前需要先 use db_name, 再建表. (对应系统级操作 cd dir_name, 相当于在指定目录下创建文件需要先进入目录),  

二. SELECT 隐式排序以及结果(默认是升序)

不区分大小写: A 和 a 的值要比 B 和 b 小, 所以整体呈现A->B->C的顺序:

区分大小写, 用 ASSIC 码去进行比较, 小写字母比大写字母ASSIC码要大, 因此为A->B->C->a->b: 

 结论: 校验集会影响查询结果, 无论是 显式地用where去指定 还是 隐式的用order去排序.


操纵数据库

MySQL 建议我们关键字(create select等)使用大写, 但是不是必须的.

1. 查看数据库, 经常用到:

show databases;

2. 查看当前使用的是哪个数据库:

select database();

3. 修改数据库

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

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

将 mytest 数据库字符集改成 gbk :

alter database mytest charset=gbk;


 4. 查询当时创建数据库时的创建语句:

show create database 数据库名;

  • 数据库名字的反引号``, 是为了防止使用的数据库名刚好是关键字.
  • /*!40100 default.... */ 这个不是注释, 表示当前 mysql 版本大于4.01版本, 就执行这句话.  
  • alter 之后, show create database db_name; 也会相应更改

可以加上\G选项, 去掉多余的边框, 只显示有用信息, 后面show create table tb_name; 实用. 

5. 数据库删除

DROP DATABASE [IF EXISTS] db_name;

 执行删除之后的结果:

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

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

数据库的备份和恢复

mysql 不提供直接数据库进行重命名, 也不要直接对数据库对应的目录文件重命名. 如果非要重命名, 方法是对数据库进行备份, 然后把文件导入到新的数据库中.

数据库迁移

数据库在两个机器上转移很容易, 只需要将备份文件交给另一台机器, 然后还原即可. 

1. 备份要使用 mysql 提供的工具去备份,  备份成功之后, 会生成一个指定的备份文件, 图中为d1.sql:

 2. 删掉d1数据库之后, 再在mysql环境下用 source 命令还原回去:

3. 由于 d1.sql 备份文件中备份的是关于该数据库曾经的所有操作, 所以会依次执行 d1.sql 中保存的操作. 

数据库重命名

如果备份一个数据库时, 没有带上 -B 参数, 在恢复数据库时, 需要:

1. 先创建空数据库, 自己命名
2. 使用数据库
3. 直接输入 source 来还原

本质是因为没有 -B 的参数, 备份的文件中就不会有第一行 create database db_name 语句, 只会保留一些表信息. 因此需要自己创建一个数据库并命名.

备份表和多个数据库 

另外, 我们如果备份的不是整个数据库, 而是其中的若干张表. 

mysqldump -u root -p 数据库名 表名1 表名2 > 备份文件路径

 同时备份多个数据库: 

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

查看连接情况

show processlist;

 可以告诉我们当前有哪些用户连接到我们的MySQL, 如果查出某个用户不是你正常登陆的, 很有可能你的数据库被人入侵了. 以后大家发现自己数据库比较慢时, 可以用这个指令来查看数据库连接情况.

总结

数据库的名称不要轻易改, 数据库不要轻易删除, 因为上层应用依赖数据库且认定改数据库的名称, 改动会出错.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git Flow分支模型

经典分支模型(Git Flow) 由 Vincent Driessen 提出的 Git Flow 模型,是管理 main(或 master)和 dev 分支的经典方案: main 用于生产发布,保持稳定; dev 用于日常开发,合并功能分支(feature/*); 功能开发在 feature 分支进行,完成后合并回 dev; 预发布分支(rele…

【Spring】依赖注入的方式:构造方法、setter注入、字段注入

在Spring框架中,除了构造器注入(Constructor Injection)和Setter注入(Setter Injection),还有一种依赖注入方式:字段注入(Field Injection)。字段注入通过在Bean的字段上…

【数学建模】随机森林算法详解:原理、优缺点及应用

随机森林算法详解:原理、优缺点及应用 文章目录 随机森林算法详解:原理、优缺点及应用引言随机森林的基本原理随机森林算法步骤随机森林的优点随机森林的缺点随机森林的应用场景Python实现示例超参数调优结论参考文献 引言 随机森林是机器学习领域中一种…

HttpSessionListener 的用法笔记250417

HttpSessionListener 的用法笔记250417 以下是关于 HttpSessionListener 的用法详解,涵盖核心方法、实现步骤、典型应用场景及注意事项,帮助您全面掌握会话(Session)生命周期的监听与管理: 1. 核心功能 HttpSessionLi…

【Python爬虫基础篇】--2.模块解析

目录 1.urllib库 1.1.request模块 1.1.1、urllib.request.urlopen() 函数 1.1.2.urllib.request.urlretrieve() 函数 1.2. error模块 1.3. parse 模块 2. BeautifulSoup4库 2.1.对象种类 2.2.对象属性 2.2.1.子节点 2.2.2.父节点 2.2.3.兄弟节点 2.2.4.回退和前进 …

Ubuntu-Linux从桌面到显示的全流程:技术分析总结

引言 Ubuntu作为主流的Linux发行版,其显示系统经历了从传统X11到现代Wayland的演进。本文将详细分析从应用程序到屏幕显示的完整技术流程,包括桌面环境、显示服务器、图形栈和硬件交互等核心环节。 1. 系统架构概览 Ubuntu的显示系统架构可分为四个主要…

在PyCharm中部署AI模型的完整指南

引言 随着人工智能技术的快速发展,越来越多的开发者开始将AI模型集成到他们的应用程序中。PyCharm作为一款强大的Python IDE,为AI开发提供了出色的支持。本文将详细介绍如何在PyCharm中部署AI模型,从环境配置到最终部署的完整流程。 第一部分:准备工作 1. 安装PyCharm …

WHAT - 静态资源缓存穿透

文章目录 1. 动态哈希命名的基本思路2. 具体实现2.1 Vite/Webpack 配置动态哈希2.2 HTML 文件中动态引用手动引用使用 index.html 模板动态插入 2.3 结合 Cache-Control 避免缓存穿透2.4 适用于多环境的动态策略 总结 在多环境部署中,静态资源缓存穿透是一个常见问题…

PoCL环境搭建

PoCL环境搭建 **一.关键功能与优势****二.设计目的****三.测试步骤**1.创建容器2.安装依赖3.编译安装pocl4.运行OpenCL测试程序 Portable Computing Language (PoCL) 简介 Portable Computing Language (PoCL) 是一个开源的、符合标准的异构计算框架,旨在为 OpenCL…

【区块链技术解析】从原理到实践的全链路指南

目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:创建简单区块链案例2:工作…

在Windows上安装Git

一、安装 Git 下载 Git地址:Git - Downloads (git-scm.com) 1、在页面中找到适用于 Windows 系统的最新版本安装包(通常为.exe 格式文件),点击下载链接。 出于访问Git官网需要科学上网,不会的可以私信我要软件包&…

Golang interface总结(其一)

本篇是对golang 中的interface做一些浅层的、实用的总结 多态 常用场景 interface内仅包含函数类型,然后定义结构体去实现,如下 package mainimport "fmt"type Animal interface {Sound()Act() }type Cat struct{}func (c *Cat) Sound() {…

TVM计算图分割--Collage

1 背景 为满足高效部署的需要,整合大量优化的tensor代数库和运行时做为后端成为必要之举。现在的深度学习后端可以分为两类:1)算子库(operator kernel libraries),为每个DL算子单独提供高效地低阶kernel实现。这些库一般也支持算…

Redis——内存策略

目录 前言 1.过期策略 1.1过期策略——DB结构 1.2过期策略——惰性删除 1.3过期策略——定期删除 2.淘汰策略 2.1最少最近使用和使用频率原理 2.2内存淘汰策略执行流程 总结: 前言 Redis之所以性能强,主要的原因就是基于内存存储。然而单节点的R…

原型模式详解及在自动驾驶场景代码示例(c++代码实现)

模式定义 原型模式(Prototype Pattern)是一种创建型设计模式,通过克隆已有对象来创建新对象,避免重复执行昂贵的初始化操作。该模式特别适用于需要高效创建相似对象的场景,是自动驾驶感知系统中处理大量重复数据结构的…

在kali中安装AntSword(蚁剑)

步骤一、下载压缩包 源码:https://github.com/AntSwordProject/antSword,下载压缩包。 加载器:https://github.com/AntSwordProject/AntSword-Loader,根据系统选择压缩包(kali选择AntSword-Loader-v4.0.3-linux-x64&…

华为仓颉编程语言基础概述

第一章:技术演进与诞生背景 1.1 万物智联时代的编程挑战 在5G、物联网、边缘计算等技术推动下,全球智能设备数量呈指数级增长。据IDC预测,2025年全球IoT设备将突破550亿台,这对系统级编程语言提出新要求: 异构硬件兼…

【Linux篇】探索进程间通信:如何使用匿名管道构建高效的进程池

从零开始:通过匿名管道实现进程池的基本原理 一. 进程间通信1.1 基本概念1.2 通信目的1.3 通信种类1.3.1 同步通信1.3.2 异步通信 1.4 如何通信 二. 管道2.1 什么是管道2.2 匿名管道2.2.1 pipe()2.2.2 示例代码:使用 pipe() 进行父子进程通信2.2.3 管道容…

【LeetCode】嚼烂热题100【持续更新】

2、字母异位词分组 方法一&#xff1a;排序哈希表 思路&#xff1a;对每个字符串排序&#xff0c;排序后的字符串作为键插入到哈希表中&#xff0c;值为List<String>形式存储单词原型&#xff0c;键为排序后的字符串。 Map<String, List<String>> m new Ha…

2025年最新版 Git和Github的绑定方法,以及通过Git提交文件至Github的具体流程(详细版)

文章目录 Git和Github的绑定方法与如何上传至代码仓库一. 注册 GitHub 账号二.如何创建自己的代码仓库&#xff1a;1.登入Github账号&#xff0c;完成登入后会进入如下界面&#xff1a;2.点击下图中红色框选的按钮中的下拉列表3.选择New repostitory4.进入创建界面后&#xff0…