在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL。由于是在线安装,所以请确保你的linux系统处于联网环境下。如果不知道怎么联网,请看我前面的文章。
一、清理环境
①首先,我们可以使用命令
rpm -qa | grep mysql
查看linux系统上是否已经安装了mysql数据库。演示如下:
由于楼主演示的时候已经安装了mysql 8.0 ,所以会显示已经安装的数据库。(如果没有请直接进入第二步)
② 接下来我们使用命令
yum remove mysql-xxx-xxx
依次删除上面的程序。
③ 删除mysql的配置文件,卸载不会自动删除配置文件,首先使用如下命令查找出所用的配置文件
find / -name mysql
根据需求使用以下命令 依次 对配置文件进行删除
二、删除MariaDB的文件
由于 在CentOS中默认安装有MariaDB,所以如果我们不删除MariaDB文件的话,安装mysql时可能会发生冲突。冲突信息如下:
[root@localhost yum.repos.d]# yum install mysql-community-server.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* epel: mirrors.ustc.edu.cn
* extras: mirrors.163.com
* updates: centos.ustc.edu.cn
Resolving Dependencies
--> Running transaction check
---> Package mariadb-server.x86_64 1:5.5.52-1.el7 will be obsoleted
--> Processing Dependency: mariadb-server for package: akonadi-mysql-1.9.2-4.el7.x86_64
---> Package mysql-community-server.x86_64 0:5.7.19-1.el7 will be obsoleting
--> Processing Dependency: mysql-community-common(x86-64) = 5.7.19-1.el7 for package: mysql-community-server-5.7.19-1.el7.x86_64
--> Processing Dependency: mysql-community-client(x86-64) >= 5.7.9 for package: mysql-community-server-5.7.19-1.el7.x86_64
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.52-1.el7 will be obsoleted
---> Package mariadb-server.x86_64 1:5.5.52-1.el7 will be obsoleted
--> Processing Dependency: mariadb-server for package: akonadi-mysql-1.9.2-4.el7.x86_64
---> Package mysql-community-client.x86_64 0:5.7.19-1.el7 will be obsoleting
--> Processing Dependency: mysql-community-libs(x86-64) >= 5.7.9 for package: mysql-community-client-5.7.19-1.el7.x86_64
---> Package mysql-community-common.x86_64 0:5.7.19-1.el7 will be installed
--> Running transaction check
---> Package mariadb-libs.x86_64 1:5.5.52-1.el7 will be obsoleted
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: perl-DBD-MySQL-4.023-5.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: 1:qt-mysql-4.8.5-13.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: perl-DBD-MySQL-4.023-5.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: 1:qt-mysql-4.8.5-13.el7.x86_64
---> Package mariadb-server.x86_64 1:5.5.52-1.el7 will be obsoleted
--> Processing Dependency: mariadb-server for package: akonadi-mysql-1.9.2-4.el7.x86_64
---> Package mysql-community-libs.x86_64 0:5.7.19-1.el7 will be obsoleting
--> Running transaction check
---> Package mariadb-server.x86_64 1:5.5.52-1.el7 will be obsoleted
--> Processing Dependency: mariadb-server for package: akonadi-mysql-1.9.2-4.el7.x86_64
---> Package mysql-community-libs-compat.x86_64 0:5.7.19-1.el7 will be obsoleting
--> Finished Dependency Resolution
Error: Package: akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda)
Requires: mariadb-server
Removing: 1:mariadb-server-5.5.52-1.el7.x86_64 (@anaconda)
mariadb-server = 1:5.5.52-1.el7
Obsoleted By: mysql-community-server-5.7.19-1.el7.x86_64 (mysql57-community)
Not found
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
① 使用rpm 命令查找出要删除的mariadb文件,命令如下
rpm -pa | grep mariadb
可能出现结果
mariadb-libs-5.5.56-2.el7.x86_64
删除上面的程序
yum -y remove mariadb-libs.x86_64
至此,原有的mysql和mariadb数据库就删除了。
三、安装mysql
① 安装mysql官网提供的mysql repo源
网址:https://dev.mysql.com/downloads/repo/yum/。操作如下:
往下翻找到我们所需的文件,如下图框所示:
② 使用命令“yum install wget 安装wget,接下来在线安装mysql。使用命令
wget http://dev.mysql.com/get/Downloads/mysql80-community-release-el7-1.noarch.rpm
③ 安装mysql80-community-release-el7-1.noarch.rpm包。使用命令:
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
④ 使用命令 “yum install mysql-community-server”安装mysql。大概有1个多G,请耐心等待安装完成。
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
四、mysql初始化配置
① 启动mysqld服务,并设为开机自动启动。命令:
systemctl start mysqld.service //这是centos7的命令
systemctl enable mysqld.service
② mysql在安装后会创建一个root@locahost账户,并且把初始的密码放到了/var/log/mysqld.log文件中。使用命令
cat /var/log/mysqld.log | grep password
③ 登录mysql
此时登录mysql会出现一个问题
经过查文档发现这是由于没有在user表中写入用户信息,只能使用不启动授权表的启动方式:
修改my.cnf配置:
注意!!!--skip-grant-tables:此选项会让MySQL服务器跳过验证步骤,允许所有用户以匿名的方式,无需做密码验证直接登陆MySQL服务器,并且拥有所有的操作权限。 但是接下来我们还是会介绍怎么修改密码与用户名。
重启mysql服务,使用命令:
systemctl restart mysqld
接下来进入到mysql:
!!! 注意:MySQL中每个命令后都要以分号;结尾。
这里的第一句是选用需要修改的数据库,在mysql中用户名密码都在数据库名为mysql的这个库中,在修改数据库中的数据表前都需要使用use命令选中使用哪个数据库,第二句是更新数据表user中root用户的密码为新密码,第三句是将前面所做的修改在系统中刷新生效。
此时我们发现字段无法修改,这是因为password字段已经变成了authentication_string字段,对我们的代码稍作修改即可:
刷新系统权限并退出:
接着重新进入mysql:
五、在mysql上进行增删改查(sql语句不区分大小写)
1、使用命令 mysql -u root -p 进入数据库,
使用命令“ show databases;”查看自带的数据库。演示如下:
使用命令
CREATE DATABASE 库名;
创建一个新的数据库,演示如下:
使用命令“show databases;” 可以查看到zg库已经创建成成功
使用命令“use 库名”选中数据库:
使用命令“show tables;”查看表:此时表为空
2、 “增”加数据操作
① 创建一个表,并插入一定的数据。命令如下:
mysql>CREATE TABLE STUDENT( ID INT, USERNAME VARCHAR(20), SERVLET INT, age INT, ADDRESS VARCHAR(30) );
演示如下:
插入数据,演示如下:
每个列必须以它们在表定义中出现的次序填充。
使用命令“ mysql> select * from 表名” 可以查看已创建的表,演示如下:
② 增加部分数据
insert into 是对行进行操作,而alter table是对字段进行操作。
(1)使用命令“insert into student (id,username) values(5,“xiaoming”);”来增加部分数据,再使用select * from student;查看下student表。演示如下:
(2)使用alter table 语句对指定字段进行添加修改删除操作
添加指定字段,使用命令
alter table student add column jsp varchar(2);
可为学生添加一门jsp的成绩列。
删除指定字段,使用命令
alter table student drop column jsp;
可删除jsp这列字段;
修改字段名,使用命令:
alter table student change column servlet javaee varchar(2);
可将servlet字段的名字修改为javaee。
修改表名,使用命令:
alter table student rename to teacher;或者是 rename teble teacher to student;
可将student表名修改为teacher
3、“修改”数据
① 根据条件修改数据
假如我现在想把id=1那一行servlet改为86可以这样做,使用命令:
update student set servlet=86 where id=1;
演示如下,我们可以看下前后对比:
② 修改多个字段的内容
update student set servlet =65,age=73 where id=3;
演示如下,可以查看下前后对比:
4、单表查询
① 查询所有列
使用命令“ select * from student;”,演示如下:
② 查询指定列
使用命令“select id,username from student;”,演示如下:
③ 查询时 指定别名
使用命令“select id as “num”,username as “user” from student as s;”,演示如下:
④ 查询时添加常量列
⑤ 查询时合并列
select id,username,(servlet+age) as “he” from student;
⑥ 条件查询
(1) 逻辑查询 and or
假设查询id=1 且username=张三的学生
使用命令 select * from student where id=1 and username=“zhangsan”;
查询id=2或者username=“李四”的同学;
使用命令“select * from student where id=1 or username=“lisi””;
(2)比较条件
> ,<, >=, <=, ==, <>, BETWEEN, AND
查询selevt大于50的同学
查询 servlet 成绩大于60分小于80分的学生
查询姓名不等于张三的记录
查询地址为空的同学
(3)模糊条件查询 like
通常使用以下替换的标记:%:表示任意字符; _:表示一个字符
查询姓zhang学生的记录
(4)聚合查询
常用的聚合函数:sum() avg() max() min() count()
查询命令都一样,这里我们只演示查询学生servlet总成绩
查询当前有多少学生 count(字段)
(4)分页查询limit 起始行,查询几行。主要用于分页。注意这里的行数从零开始。
假设我现在查询第1、2两行的内容演示如下:
(5) 排序,默认情况下按插入记录的顺序排序。order by
asc 正序 desc倒序
5、“删除”数据
① 带条件删除
假设删除id=2的同学,演示如下:
② 删除所有数据
这种删除只能删除表的数据,不能删除表的约束,要想永久删除使用命令TRUNCATE TABLE STUDENT;
删除库
在学习mysql过程中遇到视图、存储过程等一些难以理解的概念。仅以此文章记录下学习的心得。
一、全文本搜索
在介绍全文本搜索之前我们先来简单介绍一下搜索引擎。
InnoDB :事务处理引擎,不支持全文本搜索
MEMORY:功能等同于MyISAM,但由于数据存储在内存中,速度很快,适合于临时表
MyISAM:支持全文本搜索,不支持事务处理
如果你的应用中需要全文本搜索功能,应该使用MyISAM搜索引擎。
全文本搜索顾名思义就是在全文本中进行搜索,比如我想在一段注释表中查找某个关键字“key”,这时就需要用到全文本搜索。
1、启用全文本搜索支持
一般在创建表时启用全文本搜索。下面的create语句演示了fulltext子句的使用:
create table productnotes
(
note_id int not null auto_increment,
prod_id char(10) not null,
note_date datetime not null,
primary key(note_id),
fulltext(note_text)
)engine=MyISAM;
create table 语句定义表productnotes并列出它所包含的列,该表的主键为note_id,为了进行全文本搜索,Mysql根据子句fulltext(note_text)的指示对它进行索引。
2、进行全文本搜索
在索引之后,使用两个 函数Match()和Against()执行全文本搜索,其中Match()指定被搜索的列,Against()指定使用的搜索表达式。
select note text from productnotes where Match(note_text) Against("rabbit");
此select语句检索单个列note_text。由于where子句,一个全文本搜索被执行。Match(note_text)指示mysql针对指定的列进行搜索,Against(“rabbit”)指定词rabbit作为搜索文本。假如productnotes表中包含rabbit则返回包含rabbit的行。
二、视图
视图:就是将其他已经存在的表合并在一起的虚拟的表。所谓虚表,就是说这张表里面没有数据,他的数据是从别的基础表中获取到的。
创建一个productcustomers视图:
create view productcustomers as select cust_name,cust_contact,prod_id from customers,orders,orderitems where customers.cust_id=order.cust_id and orderitems.order_num=orders.order_num.
应用:
select cust_name,cust_contact from productcustomers where prod_id=‘tnt2’;
三、存储过程
存储过程:存储过程简单的说,就是为以后的使用而保存的一条或多条mysql语句的集合 ,有点类似于java的封装。
功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来, 以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用 call 存储过程名字, 即可自动完成命令 。存储过程分带参数和不带参数两种,使用create procedure
创建一个存储过程。
delimiter // 可以临时更改命令行实用程序的语句分隔符。
① 不带参数
create procedure productpricing()
begin select avg(prod_price) as priceaverage from products;
end;
应用:
call productpricing();
② 使用参数:
create procedure productpricing(out p1 decimal(8,2),out pa decimal(8,2),out ph decimal(8,2))
begin select min(prod_price) into p1 from products; select max(prod_price) into p1 from products; select avg(prod_price) into p1 from products;
end;
为了调用,需要指定3个变量,
call productpricing(@pricelow,@pricehigh,@priceaverage);
调用:
select @priceaverage;
四、游标
游标:是一个存储在mysql服务器上的数据库查询,它不是一条select语句而是被该语句检索出来的结果集,只能用于存储过程 。我们写一个select查询语句会返回给我们所有的结果,这时候我们想对查询到的结果进行一条条筛选,这个过程就是游标。
create procedure processorders()
begin declare ordernumbers cursor for select order_num from orders;
end;
五、触发器
触发器:是mysql 响应以下任意语句而自动执行的一条mysql语句 delect insert update,其他语句不支持触发器,并且只有表支持触发器 比如我可以写一个触发器,设定它在插入一笔数据到这个表里的时候,去同步另一个表.那么在程序里我只要做到往数据库里插一笔数据,那么另一个表就可以同时被更新.也可以在一个表中
create trigger newproduct after insert on products for each row select 'product added';
create trigger newproduct after insert on orders for each row select new.order_num;