[MySQL]MySQL数据库的介绍和库相关操作

目录

一、数据库介绍

1.什么是数据库

2.为什么使用数据库

3.数据库的操作运行逻辑

4.MySQL架构

5.SQL语句的分类

二、数据库的操作

1.数据库的连接

2.数据库的操作

创建数据库 

查看数据库

 显示数据库的创建语句

删除数据库

修改数据库

3.字符集和校验集

查看系统默认的字符集和校验集

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

不同校验规则的影响

4.数据库的备份与恢复

备份

恢复

5.查看连接情况 


一、数据库介绍

1.什么是数据库

 

        在我们安装数据库的时候,会给我们安装两个应用程序,mysql客户端和mysqld服务器。mysql数据库本质实际上是一个基于C/S模式的一个网络服务,上图中也可以看到3306号端口的tcp网络服务。那么他的作用是什么呢?mysql一整套服务可以给我们提供数据存取的服务。也就是说把我们的数据按照特定的结构和形式存放到磁盘文件,同时提供了将这些特定结构和形式的文件进行解析读取呈现给我们的能力。

        我们一般口语上说数据库指的是,在磁盘或者内存中按照特定结构和组织形式的数据文件。而再谈数据库服务的时候就是mysqld,而并非是mysql了。

2.为什么使用数据库

        上述我们说了数据库也是将数据存放到磁盘文件当中,那么为什么不直接存放到文件呢,而是使用一层数据库变为特定格式的文件在放到磁盘道中?

        一般的文件确实为我们提供了数据存储的能力,但是文件没有提供非常好的数据管理能力,不是操作系统不好管理,操作系统管理文件只是管理文件的一些属性,不对内容进行管理。而是对于用户来说不好管理。例如一个场景:有1万条登录记录,当我们要统计在北京登录的信息,怎么办呢?难道要一条一条的去过滤吗?程序员写一个过滤程序也是可以的,但是每次都要写吗?这也不方便啊,而数据库就提供了数据的管理能力,可以很快的将我们想要的信息提取出来。 所以数据库存在的意义就是对数据内容存储的管理提供一套解决方案。

        文件的保存还有一些其他的缺陷:文件存储不安全、文件不利于数据查询和管理、文件不利于存储海量的数据、文件在程序中控制不太方便(文件的操作)。

3.数据库的操作运行逻辑

4.MySQL架构

        MySQL是一个可移植的数据库,几乎在当前所有的操作系统下都是可以运行的,虽然各种系统在底层的实现方法对于MySQL有所不同,但是MySQL基本能够保证在各个平台上的物理体系结构的一致性。

  • 连接层主要负责处理客户端的连接请求,进行客户端的身份验证以及管理多个连接的操作。
  • 服务层主要分为查询缓存、解析器、优化器、执行器4个部分。查询缓存是将已经执行过的查询语句和结果进行缓存,当收到请求的时候,首先在缓存中查询是否有相同的请求。解析器是对客户端发出的SQL语句继续语法和词法分析,对判断准确性。优化器就是将用户输入SQL语句进行一些优化。执行器就是按照优化器生成的执行内容,调用存储引擎的接口执行SQL语句。
  • 存储引擎层主要负责数据的存储和读取操作,MySQL支持多种存储引擎,不同的引擎有自己的特点和优势。MySQL的核心就是插件式存储引擎。
  • 系统文件层主要涉及数据库文件的存储和管理,包括存储数据库的数据和文件,还有日志文件等内容。

查看存储引擎的指令:show engines

5.SQL语句的分类

  • DDL数据定义语言,用来维护存储数据的结构。代表指令:create、drop、alter等
  • DML数据操纵语言,用来对数据进行操作。代表指令:insert、delete、update等
  • DQL数据查询语言,是DML的一个分支。代表指令:select。
  • DCL数据控制语言,主要负责权限管理和事务管理。代表指令:grant、revoke、commit等。

二、数据库的操作

1.数据库的连接

        mysql有很多选项,在登录的时候-h表示的是登录部署mysql服务主机的IP地址,-P表示的是要访问的端口号,-u表示的是登录的用户名称,-p表示密码登录。所以也可以看出mysql也是可以跨网络进行登录的。下面是一个完整的数据库连接操作指令,但是一般可以省略-h和-P,在配置文件中有设置,如何省略的话默认是本地连接3306端口号。

mysql -h 127.0.0.1 -P 3306 -u root -p 123456

2.数据库的操作

创建数据库 

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification];

案例:create database test_database1 charset=utf8 collate utf8_general_ci;

        一般来说我们创建数据库的时候都是使用create database xxxx;即可,而IF NOT EXISTS字段表示的是,如果数据库不存在的时候在创建,存在就会报一个警告。如果不带该字段的话,数据库存在还创建会直接报错。create_specification字段表示的是,可以设置数据库的使用的字符集和校验规则。当我们没有指定的时候,就默认字符集是utf8,校验规则是utf8_general_ci。

        在linux系统下,我们创建一个数据库在文件系统的视角下来看的话,就是创建了一个名字为db_name的一个目录,存在于/var/lib/mysql目录下。而且我们如果在该目录下创建和删除数据库目录文件的时候,在show databases;查看数据库的时候也会收到影响,但是一定不要这样做,因为在创建数据库的时候并非只创建了一个目录,还有很多其他的操作的。

查看数据库

show databases;

 显示数据库的创建语句

show create database db_name;

        这里会显示数据库创建时候的创建语句,对于数据库名称带用反引号进行修饰是防止数据库名称和关键字恰好一样,同时MySQL建议关键字使用大写表示,只是建议。后面的40100开头的话,不是注释,而是表示如果数据库的版本大于4.01就执行该语句,80016也是如此。

删除数据库

DROP DATABASE [IF EXISTS] db_name;

案例:drop database test_database1;

        删除数据库只会,对应/var/lib/mysql目录下的数据库文件夹也会删除,级联和里面的数据表也会删除,所以在实际开发的时候不要轻易的删除数据库,在删除之前可以先进行数据库的一个备份操作。

修改数据库

ALTER DATABASE db_name [alter_spacification]

案例:alter database test_database1 charactor set gbk;   //charactor set 和charset是一样的

        对于数据库的修改来说,一般都是修改数据库的字符集和校验规则,当修改字符集的时候,校验规则也会修改成字符集默认的校验规则。

        也可以修改数据库的名称,但是这种修改一般会收到权限和数据库系统版本等因素的限制。而且会有一些安全风险,如数据丢失或者于存储引擎不兼容等问题。对于目前版本的MySQ是不支持该操作的。

3.字符集和校验集

        在创建数据库的时候,有两个编码集的设定,一个是字符集另一个是校验集。数据库字符集表示的是数据库未来存储数据的编码规则。数据库校验集用于数据库在进行字段比较的时候使用的编码格式,通俗来说就是查询数据库内容的时候用什么编码格式将二进制数据翻译一下。一个是用于设置存储时候的编码规则,另一个是用于设置数据库自身访问数据时候的编码规则,那么用什么方式存储就应该用什么方式来解析读取,所以说字符集和校验集之间一定存在很强的关系。

查看系统默认的字符集和校验集

默认字符集:show variables like 'character_set_database';

默认校验集:show variables like 'collation_database';

        如果我们想要查看当前数据库的字符集的话直接查看show create database db_name即可。

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

字符集:show charset;

校验集:show collation;

不同校验规则的影响

        使用uf8编码规则的时候,使用utf8_general_ci的校验规则和使用utf8_bin的校验规则进行操作SQL语句返回的结果是不一样的。下面的一个案例是插入一堆英文字母,并查询字母A,观察返回的情况。utf8_general_ci规则下返回的是不区分大小写的,会返回a和A两种字符,而utf8_bin是区分大小写的校验规则,只会返回a字符。

创建数据库、表以及插入数据:

查看查询数据结果:

 

4.数据库的备份与恢复

        对于数据库的删除来说,是非常危险的,因为删除了只会就无法进行还原了,而且数据库的用途一般都是存储大量且重要的数据,所以我们在删除之前应该先将数据库进行备份操作处理。mysql体系中为我们提供了一个mysqldump程序来帮助我们实现数据库的备份操作。这样我们就不用找到数据库文件进行备份了,而且这样备份的话也会有问题,一些数据库属性字段信息都没有保存上,备份好了也没法恢复。还有就是可能mysql的版本不同,备份后的数据库想要放到新版本的mysql下也不好弄,所以提供了mysqldump程序帮我们解决这些问题。

备份

mysqldump -P3306 -u root -p 123456 -B 数据库名称 > 数据库备份存储的路径

以上面的test1数据库为例进行一个备份操作案例:

        从备份文件的内容可以看出,备份文件内部记载了数据库的名称、数据库的创建语句、见表语句以及对表进行操作的各种语句,还有该数据库的版本信息等内容。

        这里的-B选项是备份的数据库内容里面带不带数据库的名称,如果不带的话,那么恢复的时候,需要我们先创建一个空的数据库,然后再将备份的内容导入进入。带的话,恢复数据库的时候,就会自动帮我们按照文件中的数据库名称创建一个数据库,然后将文件内容全部导入到新建的数据库中。

        同时也是可以同时备份多个数据库到一个文件中的,到时候恢复的时候,就会按照文件内容中的记载,一下子创建多个数据库了

mysqldump还支持单独备份一个表的内容:

mysqldump -P3306 -u root -p 123456  表名称 > 表备份存储的路径

恢复

source 备份文件路径

5.查看连接情况 

show processlist;

         通过该指令可以查看到当前有哪些用户使用了该ip地址下的mysql服务。防止了某些不正常的登录,导致数据库被入侵,或者数据库运行变得非常慢,也可能是连接使用mysql服务的人太多了。

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

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

相关文章

亚博microros小车-原生ubuntu支持系列:13 激光雷达避障

一 背景知识 小车发了了数据包含激光雷达数据,类型是sensor_msgs/msg/LaserScan bohubohu-TM1701:~$ ros2 node info /YB_Car_Node /YB_Car_Node Subscribers: /beep: std_msgs/msg/UInt16 /cmd_vel: geometry_msgs/msg/Twist /servo_s1: std_msgs/…

机器学习 ---逻辑回归

逻辑回归是属于机器学习里面的监督学习,它是以回归的思想来解决分类问题的一种非常经典的二分类分类器。由于其训练后的参数有较强的可解释性,在诸多领域中,逻辑回归通常用作 baseline 模型,以方便后期更好的挖掘业务相关信息或提…

使用 Vue 3 的 watchEffect 和 watch 进行响应式监视

Vue 3 的 Composition API 引入了 <script setup> 语法&#xff0c;这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch&#xff0c;我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…

volatile之四类内存屏障指令 内存屏障 面试重点 底层源码

目录 volatile 两大特性 可见性 有序性 总结 什么是内存屏障 四个 CPU 指令 四大屏障 重排 重排的类型 为什么会有重排&#xff1f; 线程中的重排和可见性问题 如何防止重排引发的问题&#xff1f; 总结 happens-before 和 volatile 变量规则 内存屏障指令 写操作…

ES6+新特性,var、let 和 const 的区别

在 JavaScript 中&#xff0c;var、let 和 const 都用于声明变量&#xff0c;但它们有一些重要的区别&#xff0c;主要体现在 作用域、可变性和提升机制 等方面。 1. 作用域&#xff08;Scope&#xff09; var: var 声明的变量是 函数作用域&#xff0c;也就是说&#xff0c;它…

模拟电子技术-常用半导体器件

模拟电子技术-常用半导体器件 一、半导体基础知识二、PN结2.1 PN结简介2.2 PN结正向导电性2.2.1 正向电压2.2.2 反向电压2.2.3 PN结伏安特性 三、二极管3.1 二极管伏安特性曲线3.2 二极管参数和等效电路3.2.1 性能参数3.2.2 等效电路 3.3 二极管限幅和整流应用(正向特性)3.4 稳…

01-02 三元组与七元组

01-02 三元组与七元组 好的&#xff01;以下是关于网络中的 三元组&#xff08;3-Tuple&#xff09; 和 七元组&#xff08;7-Tuple&#xff09; 的详细扩展说明&#xff0c;包括它们的组成、用途以及与五元组的对比。 1. 三元组&#xff08;3-Tuple&#xff09; 组成 三元组…

2024年博客之星主题创作|2024年蓝桥杯与数学建模年度总结与心得

引言 2024年&#xff0c;我在蓝桥杯编程竞赛和数学建模竞赛中投入了大量时间和精力&#xff0c;这两项活动不仅加深了我对算法、数据结构、数学建模方法的理解&#xff0c;还提升了我的解决实际问题的能力。从蓝桥杯的算法挑战到数学建模的复杂应用&#xff0c;我在这些竞赛中…

javascript-es6 (一)

作用域&#xff08;scope&#xff09; 规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问 局部作用域 函数作用域&#xff1a; 在函数内部声明的变量只能在函数内部被访问&#xff0c;外部无法直接访问 function getSum(){ //函数内部是函数作用…

数据的秘密:如何用大数据分析挖掘商业价值

数据的秘密&#xff1a;如何用大数据分析挖掘商业价值 在这个数据爆炸的时代&#xff0c;我们每天都在产生、存储和处理着海量的数据。然而&#xff0c;仅仅拥有数据并不等于拥有价值。就像拥有一座金矿&#xff0c;不开采和提炼&#xff0c;最终只是一堆毫无用处的石头。如何…

使用eNSP配置GRE VPN实验

实验拓扑 实验需求 1.按照图示配置IP地址 2.在R1和R3上配置默认路由使公网区域互通 3.在R1和R3上配置GRE VPN&#xff0c;使两端私网能够互相访问&#xff0c;Tunne1口IP地址如图 4.在R1和R3上配置RIPv2来传递两端私网路由 GRE VPN配置方法&#xff1a; 发送端&#xff1a; …

Ansible自动化运维实战--script、unarchive和shell模块(6/8)

文章目录 一、script模块1.1、功能1.2、常用参数1.3、举例 二、unarchive模块2.1、功能2.2、常用参数2.3、举例 三、shell模块3.1、功能3.2、常用参数3.3、举例 一、script模块 1.1、功能 Ansible 的 script 模块允许你在远程主机上运行本地的脚本文件&#xff0c;其提供了一…

大数据Hadoop入门1

目录 相关资料 第一部分 1.课程内容大纲和学习目标 2.数据分析和企业数据分析方向 3.数据分析基本流程步骤 4.大数据时代 5.分布式和集群 6.Linux操作系统概述 7.VMware虚拟机概念与安装 8.centos操作系统的虚拟机导入 9.VMware虚拟机常规使用、快照 第二部分 1.课…

【Elasticsearch】doc_values 可以用于查询操作

确实&#xff0c;doc values 可以用于查询操作&#xff0c;尽管它们的主要用途是支持排序、聚合和脚本中的字段访问。在某些情况下&#xff0c;Elasticsearch 也会利用 doc values 来执行特定类型的查询。以下是关于 doc values 在查询操作中的使用及其影响的详细解释&#xff…

TS开发的类型索引目录

TypeScript 相关知识整理 一、相关文档 Web API 类型&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/APIHTML DOM类型&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElementReact类型文档&#xff1a;https://react-typescript-cheatsheet.…

Python 对列表进行排序的 5 种方法

在 Python 中&#xff0c;排序是一个非常常见且重要的操作&#xff0c;尤其是对列表的排序。Python 提供了多种方法来实现排序操作&#xff0c;从内置函数到自定义排序逻辑&#xff0c;都可以方便地满足不同的需求。以下将介绍 Python 对列表进行排序的 5 种方法&#xff0c;并…

2025年1月26日(超声波模块:上拉或下拉电阻)

添加上拉或下拉电阻是在电子电路设计和嵌入式系统编程中常用的一种技术手段&#xff0c;下面为你详细解释其含义、作用和应用场景。 基本概念 在数字电路里&#xff0c;引脚的电平状态通常有高电平&#xff08;逻辑 1&#xff09;和低电平&#xff08;逻辑 0&#xff09;两种…

项目概述与规划 (I)

项目概述与规划 (I) JavaScript的学习已经接近尾声了&#xff0c;最后我们将通过一个项目来讲我们在JavaScript中学习到的所有都在这个项目中展现出来&#xff0c;这个项目的DEMO来自于Udemy中的课程&#xff0c;作者是Jonas Schmedtmann&#xff1b; 项目规划 项目步骤 用户…

深入探讨Web应用开发:从前端到后端的全栈实践

目录 引言 1. Web应用开发的基本架构 2. 前端开发技术 HTML、CSS 和 JavaScript 前端框架与库 响应式设计与移动优先 3. 后端开发技术 Node.js&#xff08;JavaScript后端&#xff09; Python&#xff08;Flask和Django&#xff09; Ruby on Rails Java&#xff08;S…

docker如何查看容器启动命令(已运行的容器)

docker ps 查看正在运行的容器 该命令主要是为了详细展示查看运行时的command参数 # 通过docker --no-trunc参数来详细展示容器运行命令 docker ps -a --no-trunc | grep <container_name>通过docker inspect命令 使用docker inspect&#xff0c;但是docker inspect打…