初始数据库 - 了解数据库

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 = 2M

port=3306                            // 默认端口号
datadir=/var/lib/mysql               // 存储用户建立数据库数据的路径
socket=/var/lib/mysql/mysql.sock

log-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 引擎是使用得最多的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1838_emacs_evil中跳转到任意字符evil-avy-goto-char的功能分析

Grey 全部学习内容汇总:GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 1838_emacs_evil中跳转到任意字符evil-avy-goto-char的功能分析 avy是一个比较成熟的emacs的插件,可以实现快速跳转到指定的字符位置的功能…

数据在网络中是怎么传输的?

计算机通信场景大致如下所示: 1.同一个子网中两台计算机通信 2.不属于同一个子网,两台计算机进行通信 以下内容,将围绕这两种场景进行阐述,在阐述之前,先举个场景示例,帮助大家理解一些名词 场景一&…

机器学习---Boosting

1. Boosting算法 Boosting思想源于三个臭皮匠,胜过诸葛亮。找到许多粗略的经验法则比找到一个单一的、高度预 测的规则要容易得多,也更有效。 预测明天是晴是雨?传统观念:依赖于专家系统(A perfect Expert) 以“人无…

Reinfocement Learning 学习笔记PartⅠ

文章目录 Reinfocement Learning一、基本概念二、贝尔曼公式(bellman equation)2.1 为什么return重要2.2 state value function的定义2.3 贝尔曼公式推导2.4 如何求解贝尔曼公式2.5 Action value的定义 三、贝尔曼最优公式(bellman optimalit…

HarmonyOS—实现UserDataAbility

UserDataAbility接收其他应用发送的请求,提供外部程序访问的入口,从而实现应用间的数据访问。Data提供了文件存储和数据库存储两组接口供用户使用。 文件存储 开发者需要在Data中重写FileDescriptoropenFile(Uriuri,Stringmode)方法来操作文件&#xf…

在做题中学习(32):只出现一次的数字 III

260. 只出现一次的数字 III - 力扣(LeetCode) 根据题目可知:有两个元素只出现一次,其余出现两次。 而在只出现一次的数字 I 里,只有一个元素出现一次,可以用异或的方式直接得到最后的答案,而此…

PaddleOCR:超越人眼识别率的AI文字识别神器

在当今人工智能技术已经渗透到各个领域。其中,OCR(Optical Character Recognition)技术将图像中的文字转化为可编辑的文本,为众多行业带来了极大的便利。PaddleOCR是一款由百度研发的OCR开源工具,具有极高的准确率和易…

Linux嵌入式配置USB鼠标支持+触摸板

在linux嵌入式中加入鼠标支持,首先在内核里面将mice驱动加入编译,这里用到的是usb所以还要有usb的支持,下载到板子上启动 1、定位鼠标 要用鼠标,首先要知道生成的鼠标设备是哪个,直接直接ls input目录,当…

2023.12.6-12.11 黑马知行教育项目实战,访问咨询意向线索主题

目录 简单介绍: 一.项目背景介绍 二.项目架构介绍 三.项目内容 3.1访问和咨询分析主题: 3.1.1 表与表之间的关联 3.1.2访问咨询主题需求汇总:最终需在ADS层制作六张表 3.1.3 访问咨询DWS大宽表建表与导入数据 3.2意向线索主题需求分析 3.2.1意向线索主题需求汇总:最终需在…

【数据结构(六)】希尔排序、快速排序、归并排序、基数排序的代码实现(3)

文章目录 1. 希尔排序1.1. 简单插入排序存在的问题1.2. 相关概念1.3. 应用实例1.3.1. 交换法1.3.1.1. 逐步推导实现方式1.3.1.2. 通用实现方式1.3.1.3. 计算时间复杂度 1.3.2. 移动法 2. 快速排序2.1. 相关概念2.2. 实例应用2.2.1. 思路分析2.2.2. 代码实现 2.3. 计算快速排序的…

华清远见作业第二十五天

使用三个程序来完成输出ABCABCABCABCABC #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/sem.h>#define NUM_SEMS 3 // 信号量集中的信号量数量union semun {int val;struct semid_ds *…

隔离电源与非隔离式电源

开关电源 文章目录 开关电源前言一、它们之间的区别是什么&#xff1f;二、如何区分它们呢&#xff1f;三、隔离电源与非隔离电源的优缺点四、隔离电源与非隔离电源的选择总结 前言 在产品设计时&#xff0c;倘若没有考虑应用环境对电源隔离的要求&#xff0c;产品到了应用时就…

Linux服务器安装vim命令

1、查看是否安装vim命令 vim /etc/hosts2、检查系统中是否存在安装包 rpm -qa|grep vim2、 安装vim yum -y install vim*4、测试是否安装成功 vim /etc/hosts

深度学习——第3章 Python程序设计语言(3.7 matplotlib库)

3.7 matplotlib库 目录 1 matplotlib库简介 2 pyplot的plot函数 3 matplotlib基础绘图函数示例 数据可视化有助于深度理解数据。 本节介绍绘制图形的基本方法。 1. matplotlib库简介 matplotlib官网 1.1 matplotlib库概述 matplotlib是Python优秀的数据可视化第三方库&a…

Python 神奇解码器:pyWhat 库全面指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在当今数字化的世界中&#xff0c;理解和处理文本数据是许多应用程序的关键任务。而PyWhat库作为一个用于处理文本的Python库&#xff0c;提供了强大的功能&#xff0c;帮助开发者在文本中识别和提取有意义的信息…

【Qt开发流程】之2D绘图1:概述及基本绘制与填充和渐变填充

概述 Qt的绘图系统可以使用相同的API在屏幕和打印设备上进行绘图&#xff0c;并且主要基于QPainter, QPaintDevice和QPaintEngine类。 QPainter用于执行绘图操作&#xff0c;QPaintDevice是一个二维空间的抽象&#xff0c;可以使用QPainter在其上绘制&#xff0c;QPaintEngine…

Mybatis核心配置文件加载流程详解

Mybatis核心配置文件加载流程详解 本文将介绍MyBatis在配置文件加载的过程中&#xff0c;如何加载核心配置文件、如何解析映射文件中的SQL语句以及每条SQL语句如何与映射接口的方法进行关联。 映射配置文件 在介绍核心配置文件加载流程前&#xff0c;先给出一个简单的MyBati…

从概念到现实,2024中国式元宇宙如何落地?

前几个月&#xff0c;马斯克和扎克伯格隔空约架愈演愈烈&#xff0c;网友拱火也其乐无穷。两位顶级富豪贴身肉搏&#xff1f; 想想就刺激&#xff01; 随之&#xff0c;老马的X&#xff08;原Twitter&#xff09;和小扎的Threads&#xff08;X竞品&#xff09;也获得了颇多关注…

为什么看书或者看文章有时候晕?

我今天发现&#xff0c;当我看了一篇深度学习相关的文章&#xff08;我是0基础机器学习&#xff09; 当我尝试理解的时候&#xff0c;头就开始晕了&#xff08;也有些人是犯困&#xff09;&#xff0c;并不是你的错&#xff0c;而是因为看不懂。 仔细观察就发现&#xff0c;看…

Python从入门到精通九:Python异常、模块与包

了解异常 什么是异常 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG bug单词的诞生 早期计算机采用大量继电器工作&#xff0c;马克二型计算机就是这样的。 19…