文章目录
- 一、包管理安装
- 1.1 Centos7安装mysql 5.7
- 1.2 Centos7 安装mariadb10.5
- 1.3 ubuntu使用默认仓库安装mysql 5.7
- 针对mysql5.6以前版本,执行初始化脚本提高安全性
- 二、二进制安装
- 三、mysql组成和常用工具
- 3.1 mysql客户端命令
- mysql命令
- mysqladmin命令
- 3.2 服务器端配置
- 3.3 socket连接说明
- 关闭mysqld网络连接
- 四、 数据库范式
- 第一范式
- 第二范式
- 第三范式
- 五、 结构化查询语言(Structured Query Language)
- 5.1 字符集和排序
- 5.2 SQL 注入
- 六、视图的简介
- 6.1视图的概念
- 6.2 为什么要使用视图
- 6.3 创建视图
- 6.4 查看视图
- 6.5 修改视图
- 6.6 删除视图
- 6.7 更新视图
一、包管理安装
1.1 Centos7安装mysql 5.7
配置国内yum仓库
[root@centos7 ~]#tee /etc/yum.repos.d/mysql.repo <<EOF
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
EOF
[root@centos7 ~]#yum -y install mysql-community-server
[root@centos7 ~]#systemctl enable --now mysqld
初始启动mysql时候,系统是拒绝的,会产生一个临时密码
[root@manager ~]# grep password /var/log/mysqld.log
2021-11-10T11:15:50.452005Z 1 [Note] A temporary password is generated for root@localhost: *!N/KtuZR3B+
# 用初始密码登录
[root@manager ~]# mysql -uroot -p'*!N/KtuZR3B+'
使用初始密码登录后,无法进行操作,需要修改初始密码,而且需要为复杂类型
方式1.mysql> alter user root@'localhost' identified by 'Bertwu123!';
方式2,使用客户端命令修改
[root@manager ~]# mysqladmin -uroot -p'Bertwu123!' password 'Bertwu1234!'
1.2 Centos7 安装mariadb10.5
官方网站
#创建yum仓库配置文件
[root@centos7 ~]#cat /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirrors.nju.edu.cn/mariadb/yum/10.5/centos7-amd64
gpgkey=https://mirrors.nju.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
[root@centos7 ~]#yum install MariaDB-server -y
[root@centos7 ~]#systemctl enable --now mariadb.service
[root@centos7 ~]#mysql
1.3 ubuntu使用默认仓库安装mysql 5.7
sudo apt install mysql-server
针对mysql5.6以前版本,执行初始化脚本提高安全性
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库
直接执行命令mysql_secure_installation
二、二进制安装
1.创建用户和组
[root@manager ~]# groupadd -r -g 306 mysql
[root@manager ~]# useradd -r -g 306 -u 306 -d /home/mysql mysql
2.准备数据目录,建银使用逻辑卷
[root@manager ~]# mkdir -p /data/mysql
[root@manager ~]# chown -R mysql.mysql /data/mysql
3.准备二进制程序
3.源码安装
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
tar xf mysql-VERSION-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -s mysql-VERSION mysql
4.准备配置文件
cd /usr/local/mysql
cp -b support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf
#mysql语句块中添加以下三个选项
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on #在mariadb5.5以上版的是默认值,可不加
skip_name_resolve = on #禁止主机名解析,建议使用
5.创建数据库文件(初始化必须要用的文件)
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
root@manager local]# ll /data/mysql/
total 110612
-rw-rw---- 1 mysql mysql 56 Nov 10 21:59 auto.cnf
-rw-rw---- 1 mysql mysql 12582912 Nov 10 21:59 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Nov 10 21:59 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Nov 10 21:48 ib_logfile1
-rw-rw---- 1 mysql mysql 2355 Nov 10 21:59 manager.err
-rw-rw---- 1 mysql mysql 6 Nov 10 21:59 manager.pid
drwx------ 2 mysql mysql 4096 Nov 10 21:48 mysql
drwx------ 2 mysql mysql 4096 Nov 10 21:48 performance_schema
drwx------ 2 mysql mysql 6 Nov 10 21:48 test
6.准备服务脚本,并启动服务
#centos6用下面
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#centos7 mariadb用下面 如果有对应的service 文件可以执行下面
cp /usr/local/mysql/support-files/systemd/mariadb.service
/usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable --now mariadb
# centos7用下面
cp /usr/local/mysql/support-files/mysql.server /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable mysql
systemctl start mysql
7.mysql加入 PATH路径
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
8.安全初始化
/usr/local/mysql/bin/mysql_secure_installation
三、mysql组成和常用工具
mysql客户端常用程序
mysql: 交互式或非交互式的CLI工具
mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
mysqladmin:基于mysql协议管理mysqld
mysqlimport:数据导入工具
3.1 mysql客户端命令
[root@manager ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64) using EditLine wrapper
mysql命令
mysql [OPTIONS] [database]
mysql 命令常用选项
mysql [OPTIONS] [database]
-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e "SQL" 执行SQL命令
-V, --version 显示版本
-v --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置
mysqladmin命令
mysqladmin [OPTIONS] command command....
在这里插入代码片
#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -uroot -pcentos ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos create testdb
#删除数据库testdb
mysqladmin -uroot -pcentos drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs
3.2 服务器端配置
服务器端配置文件:
/etc/my.cnf #Global选项
/etc/mysql/my.cnf #Global选项
~/.my.cnf #User-specific 选项
配置文件格式
[mysqld]
[mysqld_safe]
[mysqld_multi]
[mysql]
[mysqldump]
[server]
[client]
格式:
parameter = value
说明:
_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同,无区分大小写
3.3 socket连接说明
官方解释
服务器监听的两种 socket 地址:
- ip socket: 监听在tcp的3306端口,支持远程通信 ,侦听3306/tcp端口可以在绑定有一个或全部接口IP上
- unix sock: 监听在sock文件上,仅支持本机通信, 如:/var/lib/mysql/mysql.sock)
说明:host为localhost 时自动使用unix sock
关闭mysqld网络连接
升级维护时,只侦听本地客户端, 所有客户端和服务器的交互都通过一个socket文件实现,socket的配置存放在/var/lib/mysql/mysql.sock 可在/etc/my.cnf修改
vim /etc/my.cnf
[mysqld]
skip-networking=1
或者
bind_address=127.0.0.1
四、 数据库范式
目的:数据库规范化,正规化、标准化,是数据库设计中的一系列原理和技术,以减少
数据库中数据冗余,增进数据的一致性。
关系型数据库共有六大范式,一般遵循前三范式即可
第一范式
无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
第二范式
第二范式必须先满足第一范式,属性完全依赖于主键,要求表中的每个行必须可以被唯一地区分,通常为表加上每行的唯一标识主键PK,非PK的字段需要与整个PK(可以是一列也可以是多列)有直接相关性,即非PK的字段不能依赖于部分主键
第三范式
满足第三范式必须先满足第二范式属性,非主键属性不依赖于其它非主键属性。第三范式要求一个数据表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
五、 结构化查询语言(Structured Query Language)
- DQL(data query language) 用于数据库查询 SELECT
- DML(Data Manipulation Language) 增 删 修改 INSERT,DELETE,UPDATE
- DDL(data definition language)对数据库中的对象(表,索引,视图,触发器,函数等)操作 增删改 CREATE,DROP,ALTER
- DCL(Data Control Language) 用于对数据库权限的授予和回收 GRANT,REVOK
- TCL(terminal control language))用于对数据库事物的开启 提交 回滚 COMMIT,ROLLBACK,SAVEPOINT
SQL语言规范
-
在数据库系统中,SQL 语句不区分大小写,建议用大写
-
SQL语句可单行或多行书写,默认以 " ; " 结尾
-
关键词不能跨多行或简写
-
用空格和TAB 缩进来提高语句的可读性
-
子句通常位于独立行,便于编辑,提高可读性
sql注释规定: # 注释内容 -- 注释内容 mysql注释: # 注释内容
5.1 字符集和排序
早期MySQL版本默认为 latin1,从MySQL8.0开始默认字符集已经为 utf8mb4
查看支持的所有字符集
SHOW CHARACTER SET;
SHOW CHARSET;
查看支持所有排序规则:
SHOW COLLATION;
#注意
utf8_general_ci不区分大小写
utf8_bin 区分大小写
查看当前使用的排序规则
SHOW VARIABLES LIKE 'collation%';
设置服务器默认的字符集
vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4
#针对所有MySQL客户端
[client]
default-character-set=utf8mb4
查看当前使用的字符集
show variables like 'character%';
5.2 SQL 注入
select * from user where name='admin' and password='' or '1'='1';
select * from user where name='admin' and password='' or '1=1';
select * from user where name='admin'; -- ' and password='123';
select * from user where name='admin'; # ' and password='123';
六、视图的简介
6.1视图的概念
视图是从一张或者多张基础表或者其他视图中查询的结果构建出来的虚拟表, 同表一样由一系列的行和列组成。
数据库中只存放视图的定义,查询的数据并不放在视图中,这些数据依然存放在基础表中
数据库中表的数据发生变化,视图中相应的数据也会发生变化
其实就是一个视图函数,把复杂的查询语句先定义好,经过函数封装,下次查询直接调用即可
6.2 为什么要使用视图
a.视图能简化用户的操作
将复杂的查询创建成视图,查询时直接使用查询视图,大大简化了用户的操作难度
b.视图可以对机密数据提供安全保护
对于表中某些行或者列的数据不想让某些用户看到,可以使用视图
因为在设计数据库应用系统时,对不同的用户定义不同视图,这样就可以对机密数据进行保护
c.视图提供了数据逻辑独立性
数据逻辑独立性指:数据库中表结构(添加了字段,或者添加了关系)发送变化,用户的应用程序不会受影响
视图的机构一旦确定后,如果表及结构发生变化对视图没有任何影响, 这样视图在一定程度上就提供了对数据的逻辑独立性
6.3 创建视图
语法:
create [or replace] view 视图名称
as 查询语句
[with check option]
注意:
with check option 可选用来限制插入或者更新到视图中的记录
1.在单表上创建视图
例如:将查询emp表中empno,ename,job,sal信息的结果创建视图
create view view_emp
as (select empname,salary, empno from emp;)
查询视图
select * from view_emp;
2.在多张表上创建视图(连接表查询)
例如:将查询雇员中雇员编号,雇员姓名及雇员所在部门信息创建视图
a.多表查询语句
select e.empname,e.empno,d.*
from emp e join dept d on e.deptno=d.deptno
b.create view view_emp_dept
as select e.ename,e.empno,d.*
from emp e join dept d on e.deptno=d.deptno
c.查询视图
select * from view_emp_dept;
3.其他视图上创建视图
例如:查询视图view_emp_dept中创建新视图 查询(empno,empname,deptname)
create view view_emp_dept_new
as select empno,ename,dname from view_emp_dept
查询view_emp_dept视图
select * from view_emp_dept_new;
6.4 查看视图
1.show tables查看(既可以查看到表也可以查看到视图)
例如:show tables;
2.使用 show table status查看
语法:show table status [from |in 数据库名称] [like 视图名称]
例如:查看视图及表状态
show table status;
例如:查看某个库指定视图名称
show table status from test4 like ‘view_emp_dept’
3.desc查看视图
语法:desc 视图名;
例如:查看视图名称为view_emp_dept的结构
desc view_emp_dept;
4.show create view语句来查看视图
例如:查看view_emp
show create view view_emp;
5.在views表中查看
在MySQL中库为information_schema中有views表
例如:查询views表
select * from information_schmea.views where table_name='view_emp_dept'
6.5 修改视图
1.create or replace
进行修改
查看select * from view_emp;
例如:修改view_emp视图,去掉sal这一列
create or replace view view_emp
as select empno,ename,job from emp;
2.alter view 进行修改
语法:
alter view 视图名
as 查询语句
[with check option]
例如:使用alter view 修改视图 view_emp_dept;
select * from view_emp_dept;
在视图view_emp_dept中添加雇员入职时间和职位字段
alter view view_emp_dept
as select e.empno,e.ename,e.hiredate,e.job,d.*
from emp e,dept d where e.deptno=d.deptno
6.6 删除视图
语法:drop view [if exists] 视图名1,视图名2
例如:创建两个视图,使用drop删除
create view view1 as select empno,ename from emp;
create view view2 as select * from dept;
使用drop删除
drop view view1,view2;
6.7 更新视图
更新视图操作包括:添加数据、删除数据、修改数据 因为视图就是一张虚表,数据库只保存视图的定义,并不保存视图的数据 所以我们所做的更新视图操作实质就是对真实表的添加、修改、删除操作1.使用insert语句对视图添加数据
查看视图view_emp的结构,并向视图view_emp中插入数据
insert into view_emp(empno,ename,job) values(888,'lili','manager');
2.修改视图中的数据
例如:修改lili的职位为’clerk’
update view_emp set job='clerk' where ename='lili'
3.使用delete进行删除视图中的数据
delete from view_emp where ename='lili'
更新视图有限制(下面方式不能更新视图)
(1)视图中包含多行函数,如SUM()、 MIN()、 MAX()、 COUNT()等 。
(2)视图中包含DISTINCT、GROUP BY、 HAVING、 UNION或者UNION ALL关键字。