飞天使-mysql-安装以及环境搭建

mysql介绍

目前比较用的多的数据库类型划分 :
1. 关系型数据库
      是指采用了关系模型来组织数据的数据库

      关系模型中常用的概念:
      关系: 一张二维表,每个关系都具有一个关系名,也就是表名
      元组: 二维表中的一行,在数据库被称为记录
      属性:二维表中的一列,在数据库中被称为字段
      域:属性的取值范围,也就是数据库中某一列的取值限制。


    关系型数据库有哪些优点:
      1. 容易理解:二维表结构是非常贴近现实世界的一个概念,关系模型相对网状、层次更加容易理解。
      2. 使用方便: 通用的SQL语言使得操作数据库非常方便
      3. 易于维护:丰富的完整性大大减少了数据冗余和数据不一致的机率。

    关系型数据库有哪些缺点:
      1. 对于并发数高的网站,传统关系型数据库来说,硬盘I/O就是一个很大的瓶颈。
      2. 对于每天产生数百万数据的表中,查询效率非常低
      3. 在基于web的结构中,数据库很难横向扩展。当需要进行扩展时,可能往往需要停机维护。
      4. 性能欠佳:在关系型数据库中,导致性能欠佳的主要原因就是多表的关联查询,以及复杂的数据分析类型的SQL报表查询。

    目前比较主流的数据型数据库有以下:
      1. oracle,Microsoft SQL server, mysql, postgresql, DB2, microsoft access, SQLlite, mairadb


2. 非关系型数据库
  是指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。ACID:原子性、一致性、隔离性、持久性

  非关系型数据库结构:
  以键值对存储的,且结构可能不固定。每一个元组可以有不一样的字段。每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构。

  优点:
  1. 用户可以根据需要添加字段。、
  2. 主要适用于网络社会服务,比如facebook,微博。

  缺点:
  只适合存储一些较为简单的数据,对于需要进行复杂的查询数据,关系型数据库可能更为合适。

  目前比较主流的非关系型数据库:
  Redis,
  Amzon DynamoDB,
  memcached,
  mongodb,
  elasticsearch,

mysql 安装步骤

1. 在centos7下在安装
    wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm                          #  第一步: 下载mysql yum包
    yum localinstall mysql80-community-release-el7-3.noarch.rpm                                      #  第二步: 安装你下载rpm包

    vi /etc/yum.repos.d/mysql-community.repo  ###把mysql 8.0相关选项闭闭,把5.7给打开                  #  第三步:把myslq80的仓库源关闭掉,mysql57开启
    yum clean  all  (可选)

    yum install mysql-community-server # 安装mysql server                                             # 第四步: 执行该命令进行安装mysql

    systemctl start mysqld                                                                            # 第五步:启动mysql服务器

    systemctl enable mysqld                                                                           # 第六步: 设置开机自动启动

    grep 'temporary password' /var/log/mysqld.log                                                     # 第七步: 执行该命令获取mysql安装时自动产生的密码。

    mysql -uroot -p                                                                                   # 第八步: 登陆mysql 服务器,密码就是第七步看到那个密码。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';                                        # 第九步: 更改密码



授权
第一步:授权devopsedu用户可以从任何主机访问我们的数据库
CREATE USER 'devopsedu'@'%' IDENTIFIED BY 'zxc123ZXC@@';
  grant all privileges on *.* to 'devopsedu'@'%' identified by 'zxc123ZXC@@';

  第二步:刷新一下权限(可选)
  flush privileges;








docker 安装方式
docker pull mysql:5.7
docker images

mkdir -p /home/service/mysql/data
mkdir -p /home/service/mysql/conf/my.cnf

在my.cnf追加如下数据

[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
default-time_zone = '+8:00'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8


然后运行命令启动mysql
docker run -p 3306:3306 --name mysql \
  -v /home/service/mysql/data:/var/lib/mysql \
  -v /home/service/mysql/conf/my.cnf:/etc/my.cnf \
  -e MYSQL_ROOT_PASSWORD=123456\
  -e TZ=Asia/Shanghai \
  -d mysql



命令讲解
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-e TZ=Asia/Shanghai 修改容器默认时区为上海
-v=/mysqltest/config/my.cnf:/etc/my.cnf:映射配置文件
-v=/mysqltest/data:/var/lib/mysql:映射数据目录
注意:不同mysql版本可能配置文件目录和路径不一样,mysql5.7的容器路径为 /etc/mysql/mysql.conf.d/mysqld.cnf。


docker exec -it mysql bash

创建mysql 用户
CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'admin'@'%';
flush privileges;
然后就可以使用admin用户登陆了,因为mysql8与mysql5.7授权有一些不一样,mysql必须先创建用户才能授权,不然会出错。

docker exec -it mysql /bin/bash
cd /etc/mysql/mysql.conf.d
apt-get update
apt-get install vim
vim mysqld.cnf

加入如下一行
default-time_zone = '+8:00'

或者直接追加
echo "default-time_zone = '+8:00'" >> mysqld.cnf


修改时区
在我们备份数据库的时候,有用到时间因素,但是 Docker 容器中默认为 +0 时区,而我们是 +8 时区,我们将宿主机的时区文件映射过去就行。


-v /etc/localtime:/etc/localtime:ro


重启数据库,查看时区 show variables like '%time_zone%';









mysql 数据的查询

SELECT:
SELECT语句允许我们从表中或者视图中获取数据。一个表它包含数个列和行,就相当于我们的excle中的一个表格一样。

SELECT 语法分解:
SELECT
  columh_1,columh_2,...
FROM
  table_1
[INNER | LEFT | RIGHT] JOIN table_2 ON cohditionhs
WHERE
  cohditionhs
HAVING group_cohditons
ORDER BY columh_1
LIMIT offset,lehgt


生产环境中注意的问题:
1. 这个*代表着返回所有的数据,所以不建议在生产中执行下列语句
select * from table1,
因为这会返回大量你不需要数据,但是会对磁盘IO造成大量负担。

2. 使用*号可能会泄露我们的敏感信息。

第二节课: distinct介绍
select distinct语句是消除结果中重复的行。

语句结构:
SELECT DISTINCT
  columhs
FROM
  table_name
WHERE
  where_cohditions;




两行合起来唯一的案例:
    SELECT DISTINCT
    	state, city
    FROM
      customers
    WHERE
    	state IS NOT NULL
    ORDER BY state, city;


    Group by: 就是把数据划到一个分组里面去,然后进行以组名义排序。这样仿佛也起到了唯一效果。

    Distinct 和 Group By有什么区别:
     如果在SELECT 语句中使用group by,但是它没有使用到聚合函数的话,GROUP BY= Distinct;

     唯一区别就是group by 能够排序结果,而我们的distinct不行。


     Distinct如何结合聚合函数使用:
         SELECT
        	COUNT(DISTINCT state)
        	state
        FROM
        	customers
        WHERE
        	country = 'USA';

    Distinct如何结合LIMIT语句来使用:
        SELECT DISTINCT
        	state
        FROM
        	customers
        WHERE
        	state IS NOT NULL
        LIMIT 5;



  第三节课: mysql order by
当我们以 select语句查询数据的时候,搜索的结果默认是没有排序的。 如果对这个结果进行排序,就需要使用order by语句。允许我们做的事情。
1. 通过一个单列或者多列来排序一个结果集
2. 通过不同的列进行升序或者降序的方式进行排序我们查询到的结果。

order by语法:
  SELECT columh1,columh_2
  FROM table1
  ORDER BY columh1 [asc|desc], columh2 [asc|desc]

如果order by语句没有指定asc或者desc,默认是以升序的方式。

多列使用order by排序的方式:
就是说先以第一列为准,如果第1列有相同的行。那么在第1列的基础上,进行排序第二列。


基于表达式来进行排序:
  SELECT
  	orderNumber,
  	orderLineNumber,
  	quantityOrdered * priceEach
  FROM
  	orderdetails
  ORDER BY
  	orderNumber,
  	orderLineNumber,
  	quantityOrdered * priceEach

表达式使用别名方式进行排序的:
  SELECT
  	orderNumber,
  	orderLineNumber,
  	quantityOrdered * priceEach AS subtotal
  FROM
  	orderdetails
  ORDER BY
  	orderNumber,
  	orderLineNumber,
  	subtotal;


如何使用自定义的方式进行排序:此处使用的是field函数。
SELECT
	orderNumber, status
FROM
	orders
ORDER BY FIELD(status,'In process','shipped','cancelled','resolved','On Hold','Disputed')

参考视频

https://edu.csdn.net/learn/24875/284530?spm=3001.4143

猜你喜欢

转载自blog.csdn.net/startfefesfe/article/details/132688340
今日推荐