初始数据库 - 了解数据库

centos 7 版本当中安装 mysql

安装与卸载中,⽤⼾全部切换成为root,⼀旦 安装,普通⽤⼾是可以使用的。

卸载不需要的环境

首先,在安装之前,要先确定你当前系统当中是否已经有了mysql 的环境,如果你不想卸载,继续用也可以,当然,也可以卸载之后再重新安装。

查看当前环境当中是否有 mqsql :

上述当中的 mariadb 其实就是 mysql,只不过是mysql 的一个开源分支。也是可以正常使用的,只要是 sql 的,其实使用方式都是差不多的。

使用下述 systemctl 命令 关闭 mysql  服务:
 

使用 rpm -pa 查看 使用 yum 下载的安装包,使用 grep 过滤出 mqsql 安装包:
 

 你可以一个一个卸载安装包,但是这样太麻烦。可以使用 xargs 命令可以把 安装包列表,以xargs 的形式 喂给卸载程序, 就可以批量话卸载:
 

 验证卸载:

如果上述的第一个路径当中的 my.cnf 文件已经被删除了,说明已经卸载成功了;第二个路径是上一个 mysql 残留下来的数据,这个数据没被删除也是在情理之中的。

 配置 mysql yum 源

 获取mysql官⽅yum源   http://repo.mysql.com/
 

通过上述的网址获取到  yum  源资源。

 在上述网站当中有很多的版本,首先要确定自己的版本是多少的:

我上述的版本是 centos 7.9.xx  的,所以,尽量选择相近的版本的 yum 源进行下载。

最常用的版本就是 mqsql57,在最后后面带上的 el7-11 的意思就是  centos 7.11 版本,对应下载即可。

 下载到 windows 桌面当中就可以在 linux 系统当中使用 rz 命令,来备份到 Linux 当中:

像上述一样选择 我们下载的安装到 Linux 当中:
 

 查看当中系统当中的 yum 源:

 在我们上述安装之后,可能不会有 mysql 的yum源,我们使用 rpm -ivh 上述mysql 安装包(相当于有安装,也就是解压并拷贝):
 

 查看,mysql :
 

在这个 yum 源当中就有 对应的版本 和 一些工具。

我们按照自己的需求安装即可。但是,其实会自动根据我们所选择的 yum 源,和当前我们的系统,自己选择合适的版本。


测试 安装是否成功:
 

说明当前的 yum 源已经生效了。

安装 mysql服务

yum install -y mysql-community-server

测试安装:
 

需要保证安装之后,由上述文件。

还需要有 mysqld 这个 mysql 服务端的程序。

还需要有 mysql 这样的服务(客户端)。

 启动 mysql :

 netstat -nltp 查看:

已经有 这 mysql 的服务端口号了。


mysql 的登录 

登录 mysql 用户:
 

此时我们发现登录不上去。

 解决方法有三个:


获取临时root密码:

grep 'temporary password' /var/log/mysqld.log

可以在上述 的 mysqld.log 文件当中查看密码。(这个 方式在高版本可能不能用了)

如果上述查阅到了密码:

#获取临时root密码
[whb@VM-0-3-centos 9.9]$ sudo grep 'temporary password' /var/log/mysqld.log
2021-04-12T03:23:46.153263Z 1 [Note] A temporary password is generated for
root@localhost: yLMalT:v+5l*
#使⽤临时密码登录[whb@VM-0-3-centos 9.9]$ mysql -uroot -p
Enter password:
1 2 3 4 5 6 7 8#判断修改密码时候新密码是否符合当前的策略,不满⾜报错,不让修改,关闭它
#安全强度,默认为中,即1,要求必须包含 数字、符号、⼤⼩写字⺟,⻓度⾄少为8位
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)#密码最⼩⻓度
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
#修改本地登录密码,暂不授权远程登录mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'qwer@wu.888';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)#如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码


# 如果你安装的最新的mysql,没有所谓的临时密码,root默认没有密码
# 试着直接 client 登陆⼀下
 


 vim /etc/my.cnf    打开mysql配置⽂件:

然后,在[mysqld]最后⼀栏配置(不知道是什么,就放在配置⽂件最后) 加⼊: skip-grant-tables 选项,并保存退出():

skip-grant-tables 的意思就是 跳过 线权,不需要验证,跳过认证环节,直接登录。

如果你在修改的过程当中,已经启动了 mysql 的服务,那么你需要重启一下 mysql 的服务,上述配置文件当中修改的信息才会生效:

上述使用的是 restart ,这个命令的效果其实是 stop + start ,也就是说,上述命令相当于是下述的两个命令:


经过上述的步骤之后,你就可以免密登录 root 账户了,但是,当你在登录之时,还是会让你输入密码,不用担心,此时直接回车就可以了。如下所示,此时我们就登录上 mysql 了:

 简单配置配置文件

[mysql]
#default-character-set=utf8  // 配置编码格式

 因为 mysql 服务,默认是一个 网络服务,所以,我们可以自己绑定端口号,使用 port 字段,就可以像设置环境变量一样,设置默认端口号。

datadir 字段:我们将来在建表建立数据库,都会存储在 datadir 字段存储的 路径当中。

[mysqld]
# #
Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# #
Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# #
Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2Mport=3306                            // 默认端口号
datadir=/var/lib/mysql               // 存储用户建立数据库数据的路径
socket=/var/lib/mysql/mysql.socklog-error=/var/log/mysqld.log        // 存储错误日志路径
pid-file=/var/run/mysqld/mysqld.pid  
character-set-server=utf8            // server端使用的 编码格式是 utf-8
default-storage-engine=innodb        // mysql 使用的存储引擎
# 配置完毕,重启mysql即可

同样的,每一次修改配置文件,都需要重启 mysql 服务。

设置开启自启动

 输入下述的两行命令,设置开始自启动 mysql :
 

#开启开机⾃启动
systemctl enable mysqld
systemctl daemon-reload

常见问题

mysql 已经配置了客⼾端服务器utf8编码,但是⽆法输⼊中⽂
确保您在终端命令⾏中可以输⼊中⽂: 


[whb@VM-0-3-centos ~]$ env |grep LANG
LANG=en_US.utf8

 安装遇到秘钥过期的问题:

Failing package is: mysql-community-client-5.7.39-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

解决方案:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

其他安装 

CentOS 6.5下编译安装MySQL 5.6.14_野马红尘的技术博客_51CTO博客

CentOS 7 通过 yum 安装 MariaDB - 知乎 (zhihu.com)

Windows下通过MySQL Installer安装MySQL服务_野马红尘的技术博客_51CTO博客

windows 当中mysql 的 自启动

执行 win+r 输入 services.msc 打开服务管理器:

 

你可以在上述服务管理器当中找到你在windows 当中安装的 MySQL 找到对应的 Mysql,可以选择启动或者是 关闭。 

 

了解数据库

就算我们没有学习过数据库,看数据库这个名字要知道,这个东西就是拿来存储数据的。那么,存储数据,使用文件不就可以了吗?为什么还需要创建一个数据库呢?


文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

 我们知道,我们使用 C/C++ 程序向 文件当中是输入输出数据,其实都是输入一些字符串,在文件当中保存数据都是以 字符的方式来一个一个存储数据的。

这样就有一个很大的问题:不同的语言程序对于文件当中的数据的读取有困难了,语言当中的数据类型相对于文件当中只有字符的话,就很复杂了。比如:有 int, double , short 等等。

高级语言当中之所以要创建出这么多的数据类型,就要要用不同的数据类型来描述不同表现方式的数据,使得计算机可以更好的识别处不同的数据类型,从而使用不同的运算方式。这大大的提高的计算机 和 用户之间的交互效率。

所以,如果是只看文件当中单纯的使用字符的方式来进行存储的话,是不行的。

首先,我们需要存储的数据体量可能是很大的,那么,我们要从中找到一些相同表现类型的数据,无疑是大海捞针;不看这个,就看程序员要使用怎么样的程序才能更好的提取出这些数据,如果文件当中的各种数据之间 存储 是没有规律的话,这很难实现。

 而数据库的本质就是:对于数据内容存储的一套解决方案,只需要用户或者是程序员,向数据库提供一个要求,数据库就可以给出对应要求的数据子集。 

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。

主流数据库
 

  •  SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

 mysql基本数据库操作

 连接数据库

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

因为 mysql 服务本身是一种 网络服务,所以在链接之时是需要告诉 主机ip 地址的。像上述的 ip 代表的就是 本地环回。 

网口本地环回地址详解? 有什么作用?_回环地址-CSDN博客

  

因为上述我们设置了 免密码,所以,-p 后面是空的,直接回车即可,不需要带上密码。


 我们上述设置了配置文件,所以可以简写为:

mysql -u root -p
  • 如果没有写 -h 127.0.0.1 默认是连接本地
  • 如果没有写 -P 3306 默认是连接3306端口号

上述就是默认本地主机,端口号使用配置文件当中默认的端口号。


 

谈一谈 mqsql 和 mysqld 

  •  mqsql 是mysql 的客户端;
  • 而 mysqld 是mysql 的服务器端。

所以,其实 mysql 本质上其实是一个网络服务。 

一个可执行程序,带 "d" 的,一般是一个程序的守护进程,mysql 是 基于 C(mysql)S(mysqld) 模式一种网络服务。mysqld的 就是这个网络服务的 守护进程

  •  mysql 是一套给我们提供数据服务的网络程序;
  • 而数据库一般是指,在磁盘或者内存当中存储的特定结构组织的数据。

服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如下:
     

 

 


 数据库使用案例

 创建一个 名为 helloworld 的 数据库(注意后面要带上分号):

create database helloworld;

 此时在存储数据库的目录当中,就存储了我们上述创建的一个数据库(下述当中是显示出一个目录出来):

 在mysql 服务当中使用 show databases; 也可以查看到当前的数据库:

 所以,本质上,在Linux 当中建立一个数据库就是建立一个目录


选择一个数据库(下述例子是使用 helloworld 这个数据库),对这个数据进行操作:

use helloworld

 


创建一个数据库表:

create table student(id int,name varchar(32),gender vatchar(2)
)

 在我们建立student 表之前,helloworld 目录当中只有如下一个文件:

 建立student 表之后,就多出了两个文件:
 

 所以, Linux 当中 在数据库当中创建一个 表,本质其实就是在Linux 当中创建一个文件。


 在上述建立的student表当中插入数据:

insert into student(id, name, gender) values (1, '张三' , '男');

 如果在插入过程当中出现下述的错误,说明当前属性的编码格式可能不是 utf-8 的:

 可以使用下述的命令来修改 表当中某一个属性的 编码格式:

alter table Student change 属性名 属性名 char(10) character set utf-8;

 

之后就可以 插入成功了:

我们可以尝试插入 多个对象:

然后使用 sql 语句对 student 表当中进行查询:
 

 


删除一个表:

DROP TABLE table_name ;    -- 直接删除表,不检查是否存在

MySQL 删除数据表 | 菜鸟教程 (runoob.com)


 上述例子的总结

上述我们简单的新建了一个数据库,然后在这个数据库当中建立了一个表,然后对于这个表当中的一个一个对象进行了一个访问查找的操作。

所以,其实本质上,我们新建一个数据库本质上就是在创建一个目录,在这个目录当中有一个数据库的配置文件,在这个数据库目录当中,我们新增一个 表其实就是 在这个数据库目录当中新增一个 几个文件。

对于上述的 数据库目录,和 目录当中管理着各个表的 文件,其实都不是有 用户 或者是 程序员去做的;

而是由 mysqld 服务器端帮我们去做的,用户 和 程序员本上是不参与 目录和文件的修改的,但是,通过 mysqld 我们可以对 数据库 和 数据库当中的表,和 表当中的一个一个对象属性,进行增删查改。

用户只需要通过 mysql 客户端 ,访问到 mysqld 服务器端,然后,通过 mysqld 服务器端访问到 对应主机当中的 数据库目录当中表文件,也就访问到数据库当中的 数据了。

至于数据库当中的数据,怎么被管理的,什么时候该刷新,什么时候进行增删查改··· 所有的关于数据管理的细节,作为用户或者是程序员其实都是不用关心的。作为用户只用关心,当前需要管理哪一些数据,当前需要增删查改什么数据供用户或者是程序员来使用。

 

 MySQL 架构

 MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行(在主流的操作系统当中)。比如:Unix/Linux、Windows、Mac 和 Solaris。
 

 上述的存储引擎之所以有很多种,是因为:用户存储的数据是有很多种的,比如:二进制的,文档形式的,大文件型式的···· 等等,需要用到不同的存储引擎来帮助用户来进行 增删查改。

所以,mysql 本身其实就是一个文件系统,只不过这个 musql 的 文件系统是在操作系统 之上的一个 文件系统。

 所以对于上述的 mysql ,在操作系统看来,上面的三层(最低到 存储引擎),都是属于 进程,属于用户层;而 最底层对于 硬件当中的操作才是操作系统。

 SQL语句的分类

  •  DDL【data definition language】 数据定义语言,用来维护存储数据的结构                                  代表指令: create, drop, alter
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作                                    代表指令: insert,delete,update                                                                                                                                 ·DML中又单独分了一个DQL,数据查询语言,代表指令: select
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务                                   代表指令: grant,revoke,commit

 存储引擎

 存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。


  查看存储引擎:

show engines;

 其中 innodb 引擎是使用得最多的。

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

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

相关文章

maui下sqlite演示增删改查

数据操作类 有分页 todoitemDatabase.cs: using SQLite; using TodoSQLite.Models;namespace TodoSQLite.Data {public class TodoItemDatabase{SQLiteAsyncConnection Database;public TodoItemDatabase(){}// 初始化数据库连接和表async Task Init(){if (Databa…

积雪深度智能化监测JL-29 雪深监测仪

积雪深度智能化监测JL-29 雪深监测仪产品简介 该设备通过安装于固定高度的可视激光探测传感器采用相位差式测量方法对雪深数据连续在线监测。同时,根据长期使用情况需要,提供连续准确的数据支持。可在无人值守的恶劣环境下全自动正常运行,并…

PPT插件-好用的插件-字距快速设置-大珩助手

字距快速设置 包含两端对齐、段首缩进、取消缩进、字间距、行间距、段后距 段首缩进 每次缩进两个字符,可对选中的文字、选中的多个文本对象两个层级操作 取消缩进 将缩进取消,可对选中的文字、选中的多个文本对象两个层级操作 字间距 预设了常用…

【GlobalMapper精品教程】065:连接SQL Server空间数据库并加载数据

Global Mapper是一个地图创建和编辑工具,无法像ArcGIS一样,基于SQL Server等大型关系型数据库。它本身也并不直接连接数据库。但是,Global Mapper可以与其他软件集成,以从数据库中获取数据并在地图上显示。本文讲述Global Mapper连接SLQ Server数据库的方法。 一、创建数据…

深入理解 Goroutines 和 Go Scheduler

本文将重点帮助您了解 Golang 中的 goroutines。Go 调度程序如何工作以在 Go 中实现最佳并发性能。我会尽力用简单的语言解释,这样你就可以理解了。 我们将介绍什么是操作系统中的线程和进程,什么是并发,为什么实现并发很难,以及 goroutines 如何帮助我们实现并发。然后,…

AtCoder ABC周赛2023 12/10 (Sun) D题题解

目录 原题截图: 题目大意: 主要思路: 注: 代码: 原题截图: 题目大意: 给定两个 的矩阵 和 。 你每次可以交换矩阵 的相邻两行中的所有元素或是交换两列中的所有元素。 请问要使 变换至…

JVM虚拟机系统性学习-垃圾回收器Serial、ParNew、Parallel Scavenge和Parallel Old

垃圾回收器 有 8 种垃圾回收器,分别用于不同分代的垃圾回收: 新生代回收器:Serial、ParNew、Parallel Scavenge老年代回收器:Serial Old、Parallel Old、CMS整堆回收器:G1、ZGC Serial:串行回收 Serial是…

RT-DETR改进策略:双动态令牌混合器(D-Mixer)的TransXNet,实现RT-DETR的有效涨点

摘要 双动态令牌混合器(D-Mixer),一种输入依赖的方式聚合全局信息和局部细节。D-Mixer通过分别在均匀分割的特征片段上应用有效的全局注意力模块和输入依赖的深度卷积,使网络具有强大的归纳偏差和扩大的有效感受野。使用D-Mixer作为基本构建块设计了TransXNet,这是一种新…

Unity中实现ShaderToy卡通火(总结篇)

文章目录 前言一、把卡通火修改为后处理效果1、在Shader属性面板定义属性接收帧缓存纹理2、在片元着色器对其纹理采样后,与卡通火相加输出请添加图片描述 二、我们自定义卡通火1、修改 _CUTOFF 使卡通火显示在屏幕两侧2、使火附近屏幕偏红色 前言 在之前的文章中&a…

【IC验证】perl脚本——分析前/后仿用例回归情况

目录 1 脚本名称 2 脚本使用说明 3 nocare_list文件示例 4 脚本执行方法 5 postsim_result.log文件示例 6 脚本代码 1 脚本名称 post_analysis 2 脚本使用说明 help:打印脚本说明信息 命令:post_analysis help 前/后仿结束后,首先填…

计算机毕业设计 SpringBoot的企业内管信息化系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

首场“解数Talk” 直播来了——大模型语料数据联盟开源数据集解读

一、解数 Talk 介绍 为帮助广大开发者更好地了解大模型语料数据联盟发布的AI大模型语料数据,沟通大模型企业在AI视角下的数据需求,不断服务大模型产业生态和落地应用,联盟发起单位上海人工智能实验室联合成员单位共同打造“解数 Talk”系列直…

java系列-LinkedHashMap怎么实现LRU

1.定义变量accessOrder public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {final boolean accessOrder;public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) {super(initialCapacity, loadFactor…

《地理信息系统原理》笔记/期末复习资料(9. 网络地理信息系统)

目录 9. 网络地理信息系统 9.1. 概述 9.1.1. 网络GIS概念 9.1.2. 网络GIS体系结构 9.1.3. 网络GIS内容体系 9.2. 分布式网络GIS 9.2.1. 分布式网络GIS概念 9.2.2. 分布式主要技术 9.3. WebGIS 9.3.1. WebGIS概念 9.3.2. WebGIS分类与特点 9.3.3. WebGIS技术框架 9…

自建 SMTP 邮件发送服务

搭建自己的 SMTP 邮件发送服务器 序言 SMTP 可以直接购买云厂商的服务&#xff0c;比如 : Amazon SES SMTP 阿里云邮件推送 也可以自己搭建邮件服务器 —— 发送不限量&#xff0c;综合成本低。 下面&#xff0c;我们一步一步的演示如何自建邮件服务器。 服务器选购 自托管的…

(C)一些题12

1&#xff0e;若指针 p 已正确定义&#xff0c;要使 p 指向两个连续的整型动态存储单元&#xff0c;不正确的语是 A ) p 2*( int *) malloc ( sizeof ( int )); B ) p ( int *) malloc (2* sizeof ( int )); C ) p ( int *) malloc (4*2); D ) p ( int ") calloc (2…

飞天使-docker知识点2-dockerfile构建镜像

文章目录 dockerfile 简介dockerfile 构建实例1dockerfile 直接构建nginx 本地镜像docke tag dockerfile 简介 DockerFile 可以说是一种可以被 Docker 程序解释的脚本&#xff0c;DockerFile 是由一条条的命令组成的&#xff0c;每条命令对应 linux 下面的一条命令&#xff0c…

SimCLR损失函数详解

图片来源&#xff1a;Self-Supervised Learning 超详细解读 (二)&#xff1a;SimCLR系列 文章目录 1. 数据增强2. 获得图片表征3. 正样本和负样本构建4. 计算相似度5. 计算图片之间相似的概率6. 损失函数为什么需要大规模的batchsize&#xff1f; 1. 数据增强 有一批batchsize…

LeetCode-旋转链表问题

1.旋转链表 题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 思路&#xff1a; 这里向右移动k个位置&#xff0c;相当于从链表的倒数第k个节点处断开&#xff0c;之后再将断开的两个子链表按照相反顺序…

centos日常运维随记

# 需要生成随机字符及数字 rootAAA:~# echo $RANDOM | md5sum |cut -c 3-29 e7e8942a791146531f613c7c757 # echo $RANDOM 产生随机数据 # md5sum 随机数生成md5值 # cut -c 3-29 :md5产生的是32的md5数&#xff0c;使用cut -c 对这个数进行 第3位到第29位的截取# 在现有的…