MySQL数据库基本概念
目录
什么是数据库
从软件角度出发
从网络角度出发
MySQL数据库的client端和sever端进程
mysql的client端进程连接sever端进程
mysql配置文件
MySql存储引擎
MySQL的sql语句的分类
数据库 库的操作
创建数据库
不同校验规则对查询的数据的影响
不区分大小写
区分大小写
查看数据库
编辑
查看数据库创建语句
修改数据库(强烈不建议)
编辑
删除数据库
编辑 查看连接状态
表的操作
创建表
查看表结构
对表的操作
向表中插入记录
向表中插入新的字段
修改表的某一个字段(强烈不建议)
修改表名(强烈不建议)
删除表的某一字段
删除表
在此之前,我们已经学习了C++,数据结构,操作系统和计算机网络的相关知识,本期开始,我们将进行MySQL数据库相关知识的学习。
什么是数据库
数据库是一个大家都耳熟能详的技术,但是数据库到底是什么呢?
要了解数据库是什么,我们可以从两个角度去探讨数据库是什么。
从软件角度出发
应用层的软件中的一些表的数据,其实都是持久化存储在磁盘之上的,我们要去磁盘上访问表中的数据,这是很麻烦的一件事,我们要自己在应用层软件之中写入大量的访问磁盘中表数据的接口,这样就会导致,应用层软件访问表资源的效率非常的慢,且应用层软件设计时非常的复杂。所以我们引入了数据库的概念,数据库其实就是基于应用层软件和磁盘中间的一个应用层软件,可以帮助用户进行复杂的表的各种增删查改操作,因为其里面封装了大量的增删查改接口。
图示如下。

从网络角度出发
数据库我们也可以称其为一款网络服务,但这其实并不是一个准确的说法,更准确的说法应该其实就是一款客户端进程和服务器端进程组合起来的一种进行数据存储技术。
图示如下。

我们通过netstat -nltp查看MySQL数据库的网络服务。

大家只需要记得, 数据库中包含了网络服务就行,这个网络服务是可以被多个client端进程访问的,所以数据库安全问题就此产生,不过这不是我们本期的重点。
数据库的种类有很多种,我们要学习的是一款应用最为广泛的数据库,即MySQL数据库。
MySQL数据库的client端和sever端进程
我们上文已经讲过了,数据库本质上其实就是两个进程,一个是client端mysql进程,一个是sever端mysql进程。
一般情况下,我们自己使用数据库时,client端数据库进程和sever端数据库进程都是处于同一台主机的,我个人的mysql进程和mysqld进程是出于同一服务器主机上的。对应的目录分别为。
- client端mysql进程(可执行程序)路径:/usr/bin/mysql
- sever端mysql进程(可执行程序)路径:/usr/sbin/mysqld

mysql的client端进程连接sever端进程
连接指令如下。
mysql -h 127.0.0.1 -P 3306 -u root -p
-h表示连接的主机的ip地址,-p表示连接的主机中对应的端口号,-u代表登录数据库的用户试是谁,-p代表着要输入密码。
mysql配置文件
在/etc目录下有一个my.cnf文件,这个文件为MySQL的client端进程mysql和sever端进程mysqld的配置文件。

MySql存储引擎
可以通过show engine查看mysql支持的存储引擎。

mysql中常用的存储引擎就是InnoDB和MyISAM。
说了这么多,那么这个存储引擎到底是个啥?
上文我们已经讲过了,client端mysql进程发送sql请求至sever端mysqld进程,然后mysqld进程处理sql语句创建数据库和数据库表,我们也说过了创建的数据库和数据库表会存储在主机中的特定的目录下,数据库和数据库表都是文件,也就意味着创建的数据库和数据库表最终会持久化在磁盘上。此时存储引擎就可以发挥出它的作用了,它可以采取一些高效的措施将生成的数据库和表文件持久化在磁盘上,将来从磁盘上访问数据库和数据库表也会有自己的检索策略,从而提高数据库文件和数据库表文件的存储效率,以及检索文件中数据的效率。
MySQL的sql语句的分类
上文已经说过了,在MySQL中我们使用sql语句进行数据库和数据库表的创建,所以sql语句也会被分类,在MySQL中sql语句被分了三类。
- DDL【Data Definition Language】:数据库定义语言,用来维护数据库数据的结构。相关的指令有create,drop,alter。
- DML【Data Manipulation Language】: 数据库操纵语言,用来对数据进行操作。相关的指令有insert,delete,select,update。
- DCL【Data Control Language】:数据控制语言,用来负责权限管理和事务。相关的指令有grant,revoke,commit。
数据库 库的操作
创建数据库
首先说明,在sql语句中,不区分大小写,一条sql语句以一个 ; 隔开。
create database [if not exists db_name [charset=utf8] [collate utf8_general_ci];
其中,charset表示创建的数据库的编码规则,collate表示数据库校验规则,校验规则可以通俗的理解为,在数据库中建表以后,采用相同的sql进行查询,但是可能因为校验规则的不同导致将来查询的结果不同。
括号中的sql语句都是可以省略的,但是要注意的是,编码规则和校验规则如果省略了,就是用数据库默认的编码规则和校验规则,可以在/etc/my.cnf中配置默认的编码规则和校验规则,默认情况下,数据库的编码和校验规则分别为utf8和utf8_general_ci。

上图我们创建了一个名为study的数据库,打开/var/lib/mysql目录。

我们不难发现,创建了一个study的数据库,本质就是在/var/lib/mysql目录下创建了一个study数据库目录,目录里就是数据库的配置文件。
可以使用 show charset 和 show collation 查看MySQL数据库支持的编码规则和校验规则。
不同校验规则对查询的数据的影响
不区分大小写
使用 utf8_general_ci 校验规则,查询出来的数据不区分大小写。
我们使用上述校验规则,创建了一个学生表,如果创建的表没有限定编码规则和校验规则,则继承数据库的编码规则和校验规则。
依次插入 'A','a','B','b' 字符。

查询性别为 'a' ,'B' 的学生记录。


我们发现,这两次查询没有区分大小写,将 'A','a','B','b'都查询了出来。
区分大小写
使用 utf8_bin 校验格式在将来查询数据时,是区分大小写的。
创建了一个student表,校验格式为 utf8_bin。

依次插入 'A','a','B','b' 字符。

查询性别为 'A' ,'b' 学生记录。

我们发现,最终查询出来的记录都是查询的大写 'A' 和 小写 'b' 。
由此不难发现,数据库表的校验规则的不同,想通条件查询出来的数据记录也是不同的。
查看数据库
show databases;
查看数据库创建语句
show create database db_name;

修改数据库(强烈不建议)
修改数据库的操作很有可能为上层应用代码造成很大的影响,所以数据库一旦创建好了就不建议再去修改。
alter dataebase db_name;
修改数据库study的编码规则为gbk。

修改数据库study1的名称为study2。

我们使用上述方法是改不了数据库名称的,因为MySQL为了避免更改数据库带来不必要的风险,一般情况下是不允许更改数据库名称的,但是有其它的方法更改,但是我们仍然强烈建议不要更改数据库, 不要更改数据库,不要更改数据库,重要的事情说三遍!!!
删除数据库
drop database db_name;
查看连接状态
可以通过下列sql语句查看有多少mysql客户端进程连接上了mysqld服务器端进程。
show processlist;

表的操作
创建表
CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 存储引擎;
创建一个person表。

创建表其实也是在var/lib/mysql下的数据库目录中创建对应的表相关文件。

- person.frm:表结构
- person.MYD:表数据
- person.MYI:表索引
我们创建的person表的存储引擎为MyISAM,需要注意的是,不同的存储引擎在对应目录下生成的表文件是不一样的。
查看表结构
desc tb_name;

对表的操作
在数据库中,一列的标题我们就称之为一个字段,一行我们就称之为一条记录。
向表中插入记录

向表中插入新的字段
向person表中插入home字段。

修改表的某一个字段(强烈不建议)
修改name字段,数据类型为 char(20)。

修改name字段名称为user字段。强烈不建议修改字段名称,因为会对应用层代码造成不必要的影响。烈不建议 ,强烈不建议 ,强烈不建议 重要的事情说三遍!!!
需要注意的是,修改之后的新的user字段必须是完整定义的,也就是必须定义类型字段。
修改表名(强烈不建议)
修改person表的名称为people。
更改数据库表的名称时,rename to 中的to是可以省略的。同样的,修改表的名称可能会对应用层程序造成不必要的风险,所以强烈不建议,强烈不建议,强烈不建议!!!
删除表的某一字段
删除people表中的home字段。

删除字段时也要小心,因为删除字段会删除所有记录的该字段。
删除表
删除study数据库中的student表。

以上便是数据库以及MySQL数据库的基本概念。
本期内容到此结束^_^
相关文章:
MySQL数据库基本概念
目录 什么是数据库 从软件角度出发 从网络角度出发 MySQL数据库的client端和sever端进程 mysql的client端进程连接sever端进程 mysql配置文件 MySql存储引擎 MySQL的sql语句的分类 数据库 库的操作 创建数据库 不同校验规则对查询的数据的影响 不区分大小写 区…...
塔能科技:工厂智慧照明,从底层科技实现照明系统的智能化控制
在全球节能减碳和智慧生活需求激增的背景下,基于“用软件定义硬件,让物联运维更简捷更节能”的产品理念,塔能科技的智慧照明一体化方案如新星般崛起,引领照明行业新方向。现在,我们来深入探究其背后的创新技术。该方案…...
P3398 仓鼠找 sugar【题解】
这是LCA的一个应用,关于LCA P3398 仓鼠找 sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar 住在地下洞穴中,每个节点的编号为 1 ∼ n 1\sim n 1∼n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他…...
解决VirtualBox - Error In supR3HardenedWinReSpawn报错
问题描述 VirtualBox7.1.6启动虚拟机时报错: Error In supR3HardenedWinReSpawn NtCreateFile(\Device\VBoxDrvStub) failed: 0xc000000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries) (rc-101) Make sure the kernel module has been loaded successfully.原因分…...
Android Trace埋点beginSection打tag标签,Kotlin
Android Trace埋点beginSection打tag标签,Kotlin import android.os.Bundle import android.os.Trace import android.util.Log import androidx.appcompat.app.AppCompatActivityclass ImageActivity : AppCompatActivity() {companion object {const val TRACE_TA…...
Linux上用C++和GCC开发程序实现两个不同MySQL实例下单个Schema稳定高效的数据迁移到其它MySQL实例
设计一个在Linux上运行的GCC C程序,同时连接三个不同的MySQL实例,其中两个实例中分别有两个Schema的表结构分别与第三实例中两个Schema个结构完全相同,同时复制两个实例中两个Schema里的所有表的数据到第三个实例中两个Schema里,使…...
Lua的table(表)
Lua表的基本概念 Lua中的表(table)是一种多功能数据结构,可以用作数组、字典、集合等。表是Lua中唯一的数据结构机制,其他数据结构如数组、列表、队列等都可以通过表来实现。 表的实现 Lua的表由两部分组成: 数组部分…...
51页精品PPT | 农产品区块链溯源信息化平台整体解决方案
PPT展示了一个基于区块链技术的农产品溯源信息化平台的整体解决方案。它从建设背景和需求分析出发,强调了农产品质量安全溯源的重要性以及国际国内的相关政策要求,指出了食品安全问题在流通环节中的根源。方案提出了全面感知、责任到人、定期考核和追溯反…...
Jenkins 自动打包项目镜像部署到服务器 ---(前端项目)
Jenkins 新增前端项目Job 指定运行的节点 选择部署运行的节点标签,dev标签对应开发环境 节点的远程命令执行配置 jenkins完整流程 配置源码 拉取 Credentials添加 触发远程构建 配置后可以支持远程触发jenkins构建(比如自建的CICD自动化发布平台&…...
使用AoT让.NetFramework4.7.2程序调用.Net8编写的库
1、创建.Net8的库,双击解决方案中的项目,修改如下,启用AoT: <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><OutputType>Library</OutputType><PublishAot>true</PublishAot>&…...
第49天:Web开发-JavaEE应用SpringBoot栈模版注入ThymeleafFreemarkerVelocity
#知识点 1、安全开发-JavaEE-开发框架-SpringBoot&路由&传参 2、安全开发-JavaEE-模版引擎-Thymeleaf&Freemarker&Velocity 一、开发框架-SpringBoot 参考:https://springdoc.cn/spring-boot/ 访问SpringBoot创建的网站 1、路由映射 RequestMapping…...
学习笔记08——ConcurrentHashMap实现原理及源码解析
1. 概述 为什么需要ConcurrentHashMap? 解决HashMap线程不安全问题:多线程put可能导致死循环(JDK7)、数据覆盖(JDK8) 优化HashTable性能:通过细粒度锁替代全局锁,提高并发度 对比…...
数据集笔记:NUSMods API
1 介绍 NUSMods API 包含用于渲染 NUSMods 的数据。这些数据包括新加坡国立大学(NUS)提供的课程以及课程表的信息,还包括上课地点的详细信息。 可以使用并实验这些数据,它们是从教务处提供的官方 API 中提取的。 该 API 由静态的…...
SpringBoot新闻推荐系统设计与实现
随着信息时代的快速发展,新闻推荐系统成为用户获取个性化内容的重要工具。本文将介绍一个幽络源的基于SpringBoot开发的新闻推荐系统,该系统功能全面,操作简便,能够满足管理员和用户的多种需求。 管理员模块 管理员模块为系统管…...
谷歌推出PaliGemma 2 mix:用于多任务的视觉语言模型,开箱即用。
去年 12 月,谷歌推出了 PaliGemma 2 ,这是Gemma系列中的升级版视觉语言模型。该版本包含不同大小(3B、10B 和 28B 参数)的预训练检查点,可轻松针对各种视觉语言任务和领域进行微调,例如图像分割、短视频字幕…...
深入浅出Spring Boot框架:从入门到精通
引言 在现代软件开发中,Java 语言及其生态系统一直是构建企业级应用的首选之一。Spring Boot 是 Java 社区中最具影响力的项目之一,它继承了 Spring 框架的优点,并通过简化配置和加速开发流程,使得开发者能够更加专注于业务逻辑的…...
Spring Boot spring-boot-maven-plugin 参数配置详解
一 spring-boot-maven-plugin 插件的5个Goals spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin;重新打包存在的jar或者war包从而使他们可以在命令行使用…...
linux中断调用流程(arm)
文章目录 ARM架构下Linux中断处理全流程解析:从硬件触发到驱动调用 ⚡**一、中断触发与硬件层响应** 🔌**1. 设备触发中断** 📡 **二、CPU阶段:异常入口与上下文处理** 🖥️**1. 异常模式切换** 🔄**2. 跳转…...
考研复试问题总结-数据结构(1)
1. 说一下你对数据结构的理解 我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数…...
250301-OpenWebUI配置DeepSeek-火山方舟+硅基流动+联网搜索+推理显示
A. 最终效果 B. 火山方舟配置(一定要点击添加) C. 硅基流动配置(最好要点击添加,否则会自动弹出所有模型) D. 联网搜索配置 E. 推理过程显示 默认是没有下面的推理过程的显示的 设置步骤: 在Functions函…...
RuoYi框架介绍,以及如何基于Python使用RuoYi框架
若依框架(RuoYi)是一款基于Spring Boot和Vue.js的开源快速开发平台,广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具,帮助开发者快速搭建后台管理系统。 主要特点 前后端分离:前端采用Vue.js&#x…...
【算法】图论 —— Floyd算法 python
洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三…...
2.数据结构:2.最大异或对
数据结构 2.数据结构:1.Tire 字符串统计 当前题 最大异或对 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010,M31*N;// M 表示节点个数,每一个数最多有 31 位int n; int a[N]; i…...
剑指 Offer II 031. 最近最少使用缓存
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20031.%20%E6%9C%80%E8%BF%91%E6%9C%80%E5%B0%91%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98/README.md 剑指 Offer II 031. 最近最少使用缓存 题目描述 运用所掌握的…...
Windows 11【1001问】查看Windows 11 版本的18种方法
随着技术的飞速发展,操作系统作为连接硬件与软件的核心桥梁,其版本管理和更新变得尤为重要。对于用户而言,了解自己设备上运行的具体Windows 11版本不仅有助于优化系统性能,还能确保安全性和兼容性。然而,不同场景和需…...
小程序性能优化-预加载
在微信小程序中,数据预加载是提升用户体验的重要优化手段。以下是处理数据预加载的完整方案: 一、预加载的适用场景 跳转页面前的数据准备 如从列表页进入详情页前,提前加载详情数据首屏加载后的空闲时间 在首页加载完成后,预加载…...
vue3中展示markdown格式文章的三种形式
一、安装 # 使用 npm npm i kangc/v-md-editor -S# 使用yarn yarn add kangc/v-md-editor二、三种实现形式 1、编辑器的只读模式 main.ts文件中配置: import VMdEditor from kangc/v-md-editor; import kangc/v-md-editor/lib/style/base-editor.css;const app …...
(视频教程)Compass代谢分析详细流程及python版-R语言版下游分析和可视化
不想做太多的前情解说了,有点累了,做了很久的内容,包括整个分析,从软件安装和报错解决到后期下游python版-R语言版下游分析和可视化!单细胞代谢分析我们写过很多了,唯独少了最“高级”的compass,…...
文件描述符与重定向
1. open系统调用 在 Linux 中, open() 系统调用用于打开一个文件或设备,并返回一个文件描述符,通过该描述符可以进行文件读写操作。open() 可以用于创建新文件或打开已存在的文件,具体行为取决于传递给它的参数。 需要包含的头文件…...
为什么深度学习选择Tensor而非NumPy数组?核心优势深度解析
简短总结: 支持 GPU 加速:Tensor 提供对 GPU 的原生支持,能够有效加速计算,而 NumPy 则通常只能在 CPU 上运行。支持自动求导:深度学习模型的训练依赖于参数的优化,而 Tensor 提供了自动求导功能ÿ…...


