MYSQL day01

MySQL5.7概述以及下载安装(centOS7)

数加科技整理

一、MySQL简介

MySQL是一个典型的关系数据库,目前是Oracle公司产品之一,也是目前主流使用的关系型数据库之一。使用MySQL可以进行最基本的数据存储、管理、查询等操作,也可以方便的组建数据库集群,配置读写分离。

MySQL数据库同样使用SQL(结构化查询语言)来进行操作,同时MySQL数据库自身也有很多可以直接使用的内置函数,在部分操作的语法上和其他数据库会存在区别。

二、版本选择

1. 应用场景

社区版

在学习阶段,可以使用免费的社区版,这也是中小型企业会选用的一个版本,可以在官方网站直接进行下载。在社区版中,除了提供数据库服务端以外,同样提供了社区版相关组件,如官方的可视化工具、MySQL集群、各开发语言数据库驱动等,可以根据需要直接下载。

企业版

 

 

MySQL企业版是提供了商用的解决方案,相关的产品除了数据库服务外,还包括:MySQL云服务、企业级数据备份、企业级防火墙、企业级数据加密等。

2. MySQL版本

目前MySQL官网提供了三个大版本的支持,5.6.x、5.7.x、8.0.x。8.x版本相较于5.7版本,在性能方面做出了较大的改进和优化:2x Faster than MySQL5.7!

在8.0的MySQL数据库中,对某些常用语法的细节部分也做了调整,如果准备进行升级,一定要注意兼容性的问题。 而5.7版本相较于5.6版本而言,主要是进行了性能上的优化,并提供了更丰富的设置。如:新增了优化器、原生JSON支持、GIS扩展等。

三、下载地址

1. 官网地址

首先来到MySQL数据库官网,直接在百度搜索MySQL就可以找到:MySQL,打开之后直接点击DOWNLOADS按钮。

 

2. 社区版下载

 

进入下载界面后,点击MySQL Community(GPL)Downloads按钮进入下载界面:

 

选择MySQL Community Server

​​  

 

直击链接:MySQL :: Download MySQL Community Server

3. 选择版本

对于Linux平台而言而言,如果是解压安装基本没有任何差别。如果是软件包安装,在下载时一定要选择相应的版本。目前官网提供两个大的稳定版,一个是5.7,一个是8.0,将演示如何在CentOS 7系统下安装MySQL 5.7。

进入界面后点击Looking for previous GA versions链接:

 

 

依次选择操作系统 -> 系统版本 -> 需要下载的软件包

下载的软件包需要:common、client、libs、server。

 

 

 

4. 下载安装包

进入下载界面后,直接点击 No thanks,just start my download. 链接即可直接下载。

 

windows下载后的截图

 

 

四、安装步骤

RPM软件包格式适用于所有基于RedHat内核的Linux发行版,包括CentOS等,在安装之前都要解决好依赖和冲突的问题。由于在安装系统时所选的组件不同,可能预安装的系统环境有所不同。

1. 解决依赖冲突

在安装之前先检查一下是否有历史版本,包括可能产生冲突的mariadb软件包。

 

 

rpm -qa|grep mysql
rpm -qa|grep MySQL
rpm -qa|grep mariadb

查询出软件信息后进行卸载

rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64

 

 

2. 解决依赖缺失

在CentOS系统中安装MySQL时通常会缺少Data::Dumper,需要先进行安装。

注意:(后续需要什么我们按照同样方式安装即可)

在有网的环境下,可以直接使用yum安装。

yum -y install autoconf

3. MySQL服务端安装(先拍个快照再安装)

将下载的rpm包上传至Linux服务器中

 

 

MySQL服务端的安装包为server,安装的顺序为:common -> libs -> client -> server

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm

 

 

rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm

 

 

rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm

 

 

rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm(到这里可能会报错,如下图所示:)

 

 

只需要把对应的包安装一下即可

yum install net-tools

再执行就可以了

rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

 

 

安装完成后创建的配置文件存放在/etc/my.cnf,如果需要进行一些自定义配置,可以修改该文件。

五、使用测试

1. 启动数据库服务

使用root用户来启动服务:

systemctl start mysqld.service

检查服务状态:

systemctl status mysqld.service

查看到下图状态证明启动成功。

 

2. 首次连接修改密码

MySQL在启动后会产生一个日志文件,存放在 /var/log/mysqld.log ,其中包含了初始密码的信息,可以通过以下命令快速找到:

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

 

复制时注意前后都不要有空格。

登录mysql服务的两种方式:

1、mysql -uroot -p密码

2、mysql -uroot -p 按下回车键 在在一行输入密码,输入密码的时候是不会显示的,所以要输入正确

使用客户端命令连接

mysql -uroot -pfqomD#lTo5lH

 

 

修改安全策略

MySQL 5.7版本会安装一个密码校验插件,要求设置的密码必须在一定的位数并且要符合密码安全策略(有一定的复杂性),在学习阶段可以先调低策略,设置为一个比较简单的密码。 验证策略修改为low(只校验密码长度):

set global validate_password_policy=0;

修改最小密码长度为4:

set global validate_password_length=4;

设置新密码:

set password = password('123456');
flush privileges;

 

使用新密码连接 修改密码后使用 exit; 退出,重新使用新密码登录测试。

mysql -uroot -p

 

 

添加主机名连接规则 对于MySQL数据库,会将用户的登录密码及权限等信息存放在mysql.user表中,可以先通过以下命令查看一下:

select user,host,authentication_string from mysql.user;

 

为方便以后使用,添加任意主机的连接规则,命令如下:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3. 数据库远程连接(课程使用Navicat)

在Linux系统中安装好数据库以后,通常我们都会使用界面工具来进行远程连接。这个时候可以通过两种方式实现,如果只是需要通过界面工具远程查看数据库情况,可以通过SSH通道的方式连接,这样更安全。 如果需要在代码中直接连接远程数据进行调试,此时就需要在MySQL数据库中开启远程连接,也就是需要添加一个连接规则。

MySQL命令示例 

-- 修改表student_info增加新的一列gender
alter table student_info add gender varchar(255);

-- 修改表删除一列
alter table student_info drop column gender;

create table L1(id int, uid int unsigned, zid int(5) zerofill) default charset=utf8;

insert into L1(id,uid,zid) values(12,34,9000000);

create table L2(
	id int,
	salary decimal(8,2)
)default charset=utf8;

insert into L2(id,salary) values(1001,1.28);

insert into L2(id,salary) values(1002,100000.28);

select * from L2;

create table L3(id int not null primary key auto_increment,name varchar(5),depart char(3))default charset=utf8;

insert into L3(name,depart) values("xiaoh","xue"),("huohu","shi");

-- 查询所有员工信息(*通配符,默认查询所有的列)
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;
select * from emp;

-- 查询员工的姓名
-- 查询的时候,字段的大小写无所谓,但是建议与原表一致
-- 表名的大小写严格区分
select ename from emp;

-- 查询员工的薪资
select sal from emp;

-- 查询员工的姓名和薪资
-- 查询字段的顺序可以打乱,但是真正开发中,一定要观察后续使用的顺序
select sal,ename from emp;

-- 查询员工的姓名和薪资,推荐使用单引号
-- 使用as关键字可以对列名重新起名字,用单引号括起来
select ename as '员工姓名',sal as '员工薪资' from emp;

-- 查询到的数据可以直接进行运算
-- 查询每个员工的年薪
-- 任何数值加上null值结果为null,后面我们会学习函数来对null值进行处理
select *,(sal+comm)*12 as '年薪'  from emp;

-- select条件查询
-- 查询员工编号为7369的员工
-- 条件查询使用where关键字进行过滤
select * from emp where empno='7369';

-- 查询员工姓名叫做SMITH
select * from emp where ename='SCOTT';

-- 查询薪资大于2000的员工姓名
select ename,sal from emp where sal>2000;

-- 查询工作为SALESMAN
select * from emp where job='SALESMAN';

-- 查询部门在20的员工
select * from emp where deptno=20;

-- 查询薪资不等于2000的员工
select * from emp where sal!=3000;
select * from emp where sal<>3000;

-- 查询 员工编号为 7369 7788 7881的员工信息
select * from emp where empno=7369 or empno=7788 or empno=7881;
select * from emp where empno in(7369,7788,7881);

-- 查询 员工编号除了 7369 7788 7881之外的所有员工信息
select * from emp where empno not in(7369,7788,7881);

-- 查询除了10,20部门之外的所有员工
select * from emp where deptno not in(10,20);

-- 查询不发放津贴的员工信息
-- 判断是否为null值不能使用=号来进行判断,使用is关键字
select * from emp where comm is null;

-- 查询发放津贴的员工信息
select * from emp where comm is not null;

-- 查询薪资范围在1000-4000之间的员工信息 [1000.4000]
-- 在mysql中是不允许连续比较的
-- select * from emp where 1000<=sal<=4000; -- 错误做法
select * from emp where sal between 1000 and 4000;

-- 查询名字中有S的员工
select * from emp where ename like '%S%';

-- 查询名字最后一个字符是S
select * from emp where ename like '%S';

-- 查询名字第一个字符是S
select * from emp where ename like 'S%';

-- 查询名字第二个字符是A _
select * from emp where ename like '_A%';

-- 查询名字中有%的员工 \%
select * from emp where ename like '%\%%';

-- 查询名字中第10000个字符是A的员工(后面使用函数来处理)
-- select * from emp where ename like '______________A%'

-- 查询在20部门并且薪资大于2000的员工
select * from emp where deptno=20 and sal>2000;

-- 查询在20部门或者薪资大于2000的员工
select * from emp where deptno=20 or sal>2000;

-- 查询不在20部门并且薪资小于2000的员工
select * from emp where deptno<>20 and sal<2000;

-- 按照薪资进行排序(默认升序)
select * from emp order by sal;

-- 按照薪资进行排序(降序)
select * from emp order by sal desc;

-- 按照薪资进行排序(升序)
select * from emp order by sal asc;

-- 按照津贴进行排序(升序时null排在最前面)
select * from emp order by comm desc;

-- 多个排序的列
-- 以薪资和津贴进行排序
select * from emp order by sal asc,comm desc;

-- 多个排序的列(部门升序 薪资降序)
select * from emp order by deptno asc,sal desc;

-- 多个排序的列(工作,薪资)
select * from emp order by job,sal;

-- 查询20部门薪资最高的员工
-- 1、查询所有的20部门员工
select * from emp where deptno=20;  

-- 2、在第一步的查询结果之上对薪资sal做降序排序
select * from (select * from emp where deptno=20) t1 order by t1.sal desc;

-- 3、再第2步的处理上取出第一条记录就是薪资最高的员工 使用limit关键字进行查询
-- 分页查询 limit 数据行索引,要取的条数。
select * from (select * from emp where deptno=20) t1 order by t1.sal desc;
select * from (select * from emp where deptno=20) t1 order by t1.sal desc limit 0,2; -- 第一页的数据
select * from (select * from emp where deptno=20) t1 order by t1.sal desc limit 2,2; -- 第二页的数据
select * from (select * from emp where deptno=20) t1 order by t1.sal desc limit 4,2; -- 第三页的数据

-- select enaen from emp;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值