MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 1

第01章_Linux下MySQL的安装与使用

首先在vmware中下载centos7,实际上8更好一点,不过centos已经是时代的眼泪了,我之前已经教过了,不过是忘了,所以重新说一遍,看文档即可

2.开机前修改mac地址

(注意:如果是动态生成IP地址,请在启动前先启动被克隆的虚拟机,以保证原来虚拟机的ip不会变,否则原来虚拟机ip会变,克隆后的虚拟机ip是原来的虚拟机ip

点击编辑虚拟机设置,选择网络适配器,点击右下角高级然后下边就是mac地址,这个mac地址和被克隆的是一样的,我们点击生成,重新生成一个新的: 

3.开机后修改主机名称(这步不用改也可以)

右键打开linux的终端  输入如下:             ( 提示没有文件的,需要在vim后面加个空格

vim /etc/hostname 

这样就可以修改主机名了,接下来就是vim的基本操作,i解锁,慢慢输入,:wq保存
回到终端reboot。

 4.修改IP地址

此处需要注意的是:如果虚拟机使用的是动态ip分配,那么不需要更改ip,如果想改为静态ip,请修改:

vim /etc/sysconfig/network-scripts/ifcfg-ens33可以看到本机IP是192.168.169.130,或者右上角打开网络,设置,即可看到ip,dns所有东西了

5. 修改UUID

同样在修改IP地址的路径中修改即可,网络重启
systemctl restart network

安装有 Xshell 和 Xftp 等访问CentOS系统的工具

CentOS6和CentOS7在MySQL的使用中的区别
1. 防火墙:6是iptables,7是firewalld
2. 启动服务的命令:6是service,7是systemctl 

 现在我有三个虚拟机,是centos7,和centos7 1号,以及centos7 2号

centos7 1号 centos7 2号

2.mysql在linux的安装

  • MySQL Community Server 社区版本,开源免费,自由下载,但不提供官方技术支持,适用于 大多数普通用户。
  • MySQL Enterprise Edition 企业版本,需付费,不能在线下载,可以试用30天。提供了更多的 功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户。
  • MySQL Cluster 集群版,开源免费。用于架设集群服务器,可将几个MySQL Server封装成一个 Server。需要在社区版或企业版的基础上使用。
  • MySQL Cluster CGE 高级集群版,需付费。

 现在最新版以及是9.2.0版本,最新的LTS是8.4.4版本,选择8.0.27版本,对应的操作系统就是RED HAT即可,相应的linux7,x86-64bit         下载第一个rpm bundle解压即可

在/opt 中选择client,client-plugins,common,libs和server5个即可,有人说直接用docker 拉取更方便,但是懒得学,以后再写吧

在shell中运行cd /opt然后 ll可以列举出五个文件即可,

1. 检查/tmp临时目录权限(必不可少) 由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。执行 : chmod -R 777 /tmp

2. 安装前,检查依赖 rpm -qa|grep libaio 如果存在libaio包如下:
rpm -qa|grep net-tools 如果存在net-tools包如下:
rpm -qa|grep net-tools 如果不存在需要到centos安装盘里进行rpm安装。
安装linux如果带图形化界面,这些都是安装好 的

1. 将安装程序拷贝到/opt目录下

在mysql的安装文件目录下执行:(必须按照顺序执行)

  1. rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
  2. rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
  3. rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
  4. rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
  5. rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm 

3. 查看MySQL版本

mysql --version     或    mysqladmin --version 

 或者rpm -qa|grep -i mysql           呈现mysql的工具

4. 服务的初始化

为了保证数据库目录与文件的所有者为 mysql 登录用户,如果你是以 root 身份运行 mysql 服务,需要执 行下面的命令初始化: mysqld --initialize --user=mysql

说明: --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过 期,登录后你需要设置一个新的密码。生成的 临时密码会往日志中记录一份。 查看密码: cat /var/log/mysqld.log

 systemctl status mysqld检测mysql是否打开,

启动:systemctl start mysqld.service

关闭:systemctl stop mysqld.service

重启:systemctl restart mysqld.service

查看状态:systemctl status mysqld.service

6. 查看MySQL服务是否自启动

systemctl list-unit-files|grep mysqld.service 默认是enabled。

如不是enabled可以运行如下命令设置自启动 systemctl enable mysqld.service
如果希望不进行自启动,运行如下命令设置 systemctl disable mysqld.service

3. MySQL登录

通过 mysql -hlocalhost -P3306 -uroot -p 进行登录,在Enter password:录入初始化密码:我的是xuO-*layz92W

因为初始化密码默认是过期的,所以查看数据库会报错 修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
5.7版本之后(不含5.7),mysql加入了全新的密码安全机制。设置新密码太简单会报错

 我修改密码为abc123

 接下来继续完成其他两台的mysql安装即可,原模原样即可,.

3.3 设置远程登录

在用SQLyog或Navicat中配置远程连接Mysql数据库时遇到如下1130代号报错信息,这是由于Mysql配置了不支持远 程连接引起的

1.在远程机器上使用ping ip地址 保证网络畅通

2.在远程机器上使用telnet命令 保证端口号开放访问(在控制面板中打开“talent客户端”)
telnet ip地址 端口号

关下windows和centos的防火墙,实际上可以选择开放端口

 

下面这个在navicat中不一定会出现,记得修改即可 

 4. MySQL8的密码强度评估(了解)

因为是了解,所以不在阐述

5. 字符集的相关操作

5.1 修改MySQL5.7字符集

1. 修改步骤

在MySQL 8.0版本之前,默认字符集为 latin1 ,utf8字符集指向的是 utf8mb3 。网站开发人员在数据库 设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0开始,数据库的默认编码将改为 utf8mb4 ,从而避免上述乱码的问题。

 操作1:查看默认使用的字符集

show variables like 'character%'; 
# 或者
show variables like '%char%';

MySQL 5.7 默认的客户端和服务器都用了 latin1 ,不支持中文,保存中文会报错。

操作2:修改字符集

vim /etc/my.cnf

在MySQL5.7或之前的版本中,在文件最后加上中文字符集配置: character_set_server=utf8

操作3:重新启动MySQL服务

systemctl restart mysqld

但是原库、原表的设定不会发生变化,参数修改只对新建的数据库生效。 

2. 已有库&表字符集的变更 

MySQL5.7版本中,以前创建的库,创建的表字符集还是latin1。

修改已创建数据库的字符集 alter database dbtest1 character set 'utf8';
修改已创建数据表的字符集 alter table t_emp convert to character set 'utf8';

注意:但是原有的数据如果是用非'utf8'编码的话,数据本身编码不会发生改变。已有数据需要导 出或删除,然后重新插入。


 5.2 各级别的字符集

MySQL有4个级别的字符集和比较规则,分别是: 服务器级别 数据库级别 表级别 列级别

character_set_server:服务器级别的字符集
character_set_database:当前数据库的字符集 character_set_client:服务器解码请求时使用的字符集
character_set_connection:服务器处理请求时会把请求字符串从character_set_client转为 character_set_connection
character_set_results:服务器向客户端返回数据时使用的字符集 

5.3 字符集与比较规则(了解)

utf8 字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示 了。而字符集表示一个字符所用的最大字节长度,在某些方面会影响系统的存储和性能,所以设计 MySQL的设计者偷偷的定义了两个概念:
utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。

上表中,MySQL版本一共支持41种字符集,

#查看GBK字符集的比较规则
SHOW COLLATION LIKE 'gbk%';#查看UTF-8字符集的比较规则
SHOW COLLATION LIKE 'utf8%';
# 查看服务器的字符集和比较规则
SHOW VARIABLES LIKE '%_server';# 查看数据库的字符集和比较规则
SHOW VARIABLES LIKE '%_database';# 查看具体数据库的字符集
SHOW CREATE DATABASE dbtest1;# 修改具体数据库的字符集
ALTER DATABASE dbtest1 DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
USE dbtest1;# 查看表的字符集
SHOW CREATE TABLE empl;# 查看表的比较规则
SHOW TABLE STATUS FROM dbtest1 LIKE '%empl';# 修改表的字符集和比较规则
ALTER TABLE empl DEFAULT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

5.4 请求到响应过程中字符集的变化

为了体现出字符集在请求处理过程中的变化,我们这里特意修改一个系统变量的值:
mysql> set character_set_connection = gbk;
Query OK, 0 rows affected (0.00 sec)

现在假设我们客户端发送的请求是下边这个字符串:
SELECT * FROM t WHERE s = '我';

为了方便大家理解这个过程,我们只分析字符“我”在这个过程中字符集的转换。
现在看一下在请求从发送到结果返回过程中字符集的变化:
1. 客户端发送请求所使用的字符集
一般情况下客户端所使用的字符集和当前操作系统一致,不同操作系统使用的字符集可能不一样,如下:
   - 类 Unix 系统使用的是 utf8
   - Windows 使用的是 gbk
当客户端使用的是 utf8 字符集,字符“我”在发送给服务器的请求中的字节形式就是:
   0xE68891

提示
如果你使用的是可视化工具,比如navicat之类的,这些工具可能会使用自定义的字符集来编码发送到服务器的字符串,而不采用操作系统默认的字符集(所以在学习的时候还是尽量用命令行窗口)。

2. 服务器接收到客户端发送来的请求其实是一串二进制的字节,它会认为这串字节采用的字符集是 character_set_client,然后把这串字节转换为 character_set_connection 字符集编码的字符。
由于我的计算机上 character_set_client 的值是 utf8,首先会按照 utf8 字符集对字节串 0xE68891 进行解码,得到的字符串就是“我”,然后按照 character_set_connection 代表的字符集,也就是 gbk 进行编码,得到的结果就是字节串 0xCED2。

3. 因为表 t 的列 col 采用的是 gbk 字符集,与 character_set_connection 一致,所以直接到列中找字节值为 0xCED2 的记录,最后找到了一条记录。

提示
如果某个列使用的字符集和 character_set_connection 代表的字符集不一致的话,还需要进行一次字符集转换。

4. 上一步骤找到的记录中的 col 列其实是一个字节串 0xCED2,col 列是采用 gbk 进行编码的,所以首先会将这个字节串用 gbk 进行解码,得到字符串“我”,然后再把这个字符串使用 character_set_results 代表的字符集,也就是 utf8 进行编码,得到了新的字节串:0xE68891,然后发送给客户端。

5. 由于客户端是用的字符集是 utf8,所以可以顺利的将 0xE68891 解释成字符“我”,从而显示到我们的显示器上,所以我们人类也读懂了返回的结果。

6. SQL大小写规范 

在 SQL 中,关键字和函数名是不用区分字母大小写的,比如 SELECT、WHERE、ORDER、GROUP BY 等关 键字,以及 ABS、MOD、ROUND、MAX 等函数名。

不过在 SQL 中,你还是要确定大小写的规范,因为在 Linux 和 Windows 环境下,你可能会遇到不同的大 小写问题。 windows系统默认大小写不敏感,但是 linux系统是大小写敏感的。

通过如下命令查看: SHOW VARIABLES LIKE '%lower_case_table_names%' 

lower_case_table_names参数值的设置: 默认为0,大小写敏感。
设置1,大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转 换为小写对表和数据库进行查找。
设置2,创建的表和数据库依据语句上格式存放,凡是查找都是转换为小写进行。 

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

1、数据库名、表名、表的别名、变量名是严格区分大小写的;

2、关键字、函数名称在 SQL 中不区分大小写;

3、列名(或字段名)与列的别名(或字段别名)在所有的情况下均是忽略大小写的; MySQL在Windows的环境下全部不区分大小写

6.2 Linux下大小写规则设置

当想设置为大小写不敏感时,要在 my.cnf 这个配置文件 [mysqld] 中加入 lower_case_table_names=1 ,然后重启服务器。 

  • 但是要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将找不到数据库名。
  • 此参数适用于MySQL5.7。在MySQL 8下禁止在重新启动 MySQL 服务时将 lower_case_table_names 设置成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值。如果非要将MySQL8设置为大小写不敏感,具体步骤为:
    1、停止MySQL服务
    2、删除数据目录,即删除 /var/lib/mysql 目录
    3、在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1
    4、启动MySQL服务

 7. sql_mode的合理设置

sql_mode 会影响 MySQL 支持的 SQL 语法以及它执行的 数据验证检查。通过设置 sql_mode,可以完成不同严格程度的数据校验,有效地保障数据准确性。

MySQL 服务器可以在不同的 SQL 模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于 sql_mode 系统变量的值。

MySQL 5.6 和 MySQL 5.7 默认的 sql_mode 模式参数是不一样的:
- 5.6 的 mode 默认值为空(即:NO_ENGINE_SUBSTITUTION),其实表示的是一个空值,相当于没有什么模式设置,可以理解为宽松模式。在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。
- 5.7 的 mode 是 STRICT_TRANS_TABLES,也就是 严格模式。用于进行数据的严格校验,错误数据不能插入,报 error(错误),并且事务回滚。

7.2 宽松模式 vs 严格模式

宽松模式: 如果设置的是宽松模式,那么我们在插入数据的时候,即便是给了一个错误的数据,也可能会被接受, 并且不报错。

举例:我在创建一个表时,该表中有一个字段为name,给name设置的字段类型时 在插入数据的时候,其中name这个字段对应的有一条数据的 char(10) ,如果我 长度超过了10,例如'1234567890abc',超 过了设定的字段长度10,那么不会报错,并且取前10个字符存上,也就是说你这个数据被存为 了'1234567890',而'abc'就没有了。但是,我们给的这条数据是错误的,因为超过了字段长度,但是并没 有报错,并且mysql自行处理并接受了,这就是宽松模式的效果。

应用场景:通过设置sql mode为宽松模式,来保证大多数sql符合标准的sql语法,这样应用在不同数据 库之间进行 迁移时,则不需要对业务sql 进行较大的修改。

严格模式: 出现上面宽松模式的错误,应该报错才对,所以MySQL5.7版本就将sql_mode默认值改为了严格模式。所 以在生 产等环境中,我们必须采用的是严格模式,进而 开发、测试环境的数据库也必须要设置,这样在 开发测试阶段就可以发现问题。并且我们即便是用的MySQL5.6,也应该自行将其改为严格模式。

开发经验:MySQL等数据库总想把关于数据的所有操作都自己包揽下来,包括数据的校验,其实开发 中,我们应该在自己 开发的项目程序级别将这些校验给做了,虽然写项目的时候麻烦了一些步骤,但是这 样做之后,我们在进行数据库迁移或者在项目的迁移时,就会方便很多。

改为严格模式后可能会存在的问题: 若设置模式中包含了 NO_ZERO_DATE ,那么MySQL数据库不允许插入零日期,插入零日期会抛出错误而 不是警告。例如,表中含字段TIMESTAMP列(如果未声明为NULL或显示DEFAULT子句)将自动分配 DEFAULT '0000-00-00 00:00:00'(零时间戳),这显然是不满足sql_mode中的NO_ZERO_DATE而报错。

CREATE TABLE mytbl2 (id INT, NAME VARCHAR(16), age INT, dept INT) ;INSERT INTO mytbl2 VALUES (1, 'zhang3', 33, 101);
INSERT INTO mytbl2 VALUES (2, 'li4', 34, 101);
INSERT INTO mytbl2 VALUES (3, 'wang5', 34, 102);
INSERT INTO mytbl2 VALUES (4, 'zhao6', 34, 102);
INSERT INTO mytbl2 VALUES (5, 'tian7', 36, 102);# 查询每个部门年龄最大的人
SELECT NAME, dept, MAX(age) FROM mytbl2 GROUP BY dept ;# 查询每个部门年龄最大的人
SELECT NAME, dept, MAX(age)
FROM mytbl2
GROUP BY dept ;# 设置sql_mode
SET SESSION sql_mode = '';

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

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

相关文章

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

前言 ES 7.10 可能是现在比较常见的 ES 版本。但是对于一些相迭代比较慢的早期业务系统来说,ES 6.8 是一个名副其实的“钉子户”。 借着工作内升级调研的任务东风,我整理从 ES 6.8 到 ES 7.10 ELastic 重点列出的新增功能和优化内容。将分为 6 个篇幅给…

Vue前端开发-Vant组件之Button组件

Vant 有丰富的UI组件,而基础组件是全部组件的核心,基础组件中将常用的元素做了二次的开发,封装成Vant格式组件,如按钮、图片和布局等,这些封装后的Vant组件,提供了更多面向实际应用的属性和事件&#xff0c…

《机器学习数学基础》补充资料:求解线性方程组的克拉默法则

《机器学习数学基础》中并没有将解线性方程组作为重点,只是在第2章2.4.2节做了比较完整的概述。这是因为,如果用程序求解线性方程组,相对于高等数学教材中强调的手工求解,要简单得多了。 本文是关于线性方程组的拓展,供…

力扣 买卖股票的最佳时机

贪心算法典型例题。 题目 做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…

idea无法联网,离线安装插件

插件地址:https://plugins.jetbrains.com/ JetBrains Marketplace 如果无法进入,可以试试 配置hosts 3.163.125.103 plugins.jetbrains.com ip 变了,可以查询个最新的: https://tool.chinaz.com/speedtest/plugins.jetbrai…

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构,包含一系列功能要素,被分为大约20个模块 Spring核心容器:包含Core、Bean、Context、Expression Language模块 Core :其他组件的基本核心&#xff…

Spring Boot 定时任务:轻松实现任务自动化

在现代应用开发中,定时任务是一个常见的需求。比如,我们可能需要定时清理过期数据、定时发送邮件通知等。 操作流程 开启定时任务注解 在启动类添加注解EnableScheduling 设置时间(固定时间间隔) 使用 Scheduled 注解创建定时…

DeepSeek R1生成图片总结2(虽然本身是不能直接生成图片,但是可以想办法利用别的工具一起实现)

DeepSeek官网 目前阶段,DeepSeek R1是不能直接生成图片的,但可以通过优化文本后转换为SVG或HTML代码,再保存为图片。另外,Janus-Pro是DeepSeek的多模态模型,支持文生图,但需要本地部署或者使用第三方工具。…

燧光 XimmerseMR SDK接入Unity

官网SDK文档连接: RhinoX Unity XR SDK 一:下载SDK 下载链接:RhinoX Unity XR SDK 二:打开Unity项目,添加Package 1、先添加XR Core Utilties包和XR Interaction Toolkit包 2、导 2、再导入下载好的燧光SDK 三&…

vue学习笔记

结合目录,点击阅读 文章目录 案例1:第一行vue代码App.vue引入Person.vue案例:改变变量的值案例:改变对象属性值案例:toRefs进行解包案例:给名字首字母大写案例:监视变量值的变化案例&#xff1…

初学PADS使用技巧笔记(也许会继续更新)

操作意图:网上找某个芯片封装又不想自己画,再加上没经验,怎么办? 就以AC-DC芯片PN8036为例,打开嘉立创的的DFM,打开立创商城,输入PN8036,点击数据手册,然后点击直接打开…

解锁机器学习核心算法 | 随机森林算法:机器学习的超强武器

一、引言 在机器学习的广阔领域中,算法的选择犹如为一场冒险挑选趁手的武器,至关重要。面对海量的数据和复杂的任务,合适的算法能够化繁为简,精准地挖掘出数据背后隐藏的模式与价值。机器学习领域有十大核心算法,而随…

LeetCode每日精进:225.用队列实现栈

题目链接:225.用队列实现栈 题目描述: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x…

二.数据治理流程架构

1、数据治理流程架构核心思想: 该图描绘了一个以数据标准规范体系为核心,大数据生命周期管理为主线,数据资源中心为依托,并辅以数据质量管理和大数据安全与隐私管理的数据治理流程架构。它旨在通过规范化的流程和技术手段&#x…

java_使用Spring Cloud Gateway + nacos实现跨域访问

Spring Cloud Gateway简介 Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生…

Linux中安装open-webui报sqlite版本低的解决办法

almalinux中安装好open-webui,启动服务时报如下错: RuntimeError: [91mYour system has an unsupported version of sqlite3. Chroma requires sqlite3 > 3.35.0.[0m [94mPlease visit https://docs.trychr…

基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【AI视频】Runway注册、基本设置、主界面详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI视频 | Runway 文章目录 💯前言💯Runway的正确启动方式推荐使用Google Chrome打开Chrome翻译 💯Runway的注册💯My Account(我的账户)General&a…

大数据的特点

高速、多样性、大量、低价值密度 大数据的应用场景 视频推荐,电商推荐,零售,金融 发展脉络 1.单机时代 2.大数据时代-分布式处理 Hadoop的优势 高可靠性、高拓展性、高效性、 高容错性

P8752 [蓝桥杯 2021 省 B2] 特殊年份——string提取索引转换为值

这里写目录标题 链接题目代码大佬解答string提取索引转换为值 链接 P8752 [蓝桥杯 2021 省 B2] 特殊年份 题目 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <queue&g…