images\cherry_red.png1 实训二前期LNMP简易架构
      images\cherry_blue.png1.1 php server安装
      images\cherry_blue.png1.2 安装初始化数据库
   images\cherry_red.png2 Mysql数据库
      images\cherry_blue.png2.1 Mysql5.7安装
         images\cherry_orange.png2.1.1 rpm安装
         images\cherry_orange.png2.1.2 yum安装
         images\cherry_orange.png2.1.3 源码安装
         images\cherry_orange.png2.1.4 编译好的非rpm包安装
         images\cherry_orange.png2.1.5 my.cnf常见选项
      images\cherry_blue.png2.2 Mysql基础
         images\cherry_orange.png2.2.1 MySql数据库操作
         images\cherry_orange.png2.2.2 MySql数据类型
            images\cherry_cyan.png2.2.2.1 整型
            images\cherry_cyan.png2.2.2.2 浮点数和定数
            images\cherry_cyan.png2.2.2.3 字符串类型
            images\cherry_cyan.png2.2.2.4 日期和时间类型
            images\cherry_cyan.png2.2.2.5 字段修饰和约束
            images\cherry_cyan.png2.2.2.6 业务建表练习
         images\cherry_orange.png2.2.3 MySql表操作
         images\cherry_orange.png2.2.4 MySql体系结构
         images\cherry_orange.png2.2.5 MySql存储引擎
      images\cherry_blue.png2.3 MySql操作
         images\cherry_orange.png2.3.1 MySql数据操作
         images\cherry_orange.png2.3.2 MySql单表查询
         images\cherry_orange.png2.3.3 MySql多表查询
         images\cherry_orange.png2.3.4 MySql存储过程与函数
      images\cherry_blue.png2.4 MySql操作-2
         images\cherry_orange.png2.4.1 MySql安全机制
         images\cherry_orange.png2.4.2 MySql日志管理
         images\cherry_orange.png2.4.3 MySql复制概述
         images\cherry_orange.png2.4.4 主从同步
      images\cherry_blue.png2.5 最基本sql语句及主从架构
      images\cherry_blue.png2.6 MyCat中间件
         images\cherry_orange.png2.6.1 部署Mycat
         images\cherry_orange.png2.6.2 配置读写分离
            images\cherry_cyan.png2.6.2.1 安全的读写分离
         images\cherry_orange.png2.6.3 XML语法格式
         images\cherry_orange.png2.6.4 mycat 分表分库
      images\cherry_blue.png2.7 Mysql MHA
         images\cherry_orange.png2.7.1 MHA-部署
         images\cherry_orange.png2.7.2 MHA-故障切换VIP透明
            images\cherry_cyan.png2.7.2.1 VIP切换脚本内容
            images\cherry_cyan.png2.7.2.2 VIP-手动在线切换脚本
         images\cherry_orange.png2.7.3 MHA+Mycat高可用Mysql读写分离
         images\cherry_orange.png2.7.4 MHA+VIP+Mycat
         images\cherry_orange.png2.7.5 MHA-故障切换邮件报警
         images\cherry_orange.png2.7.6 自动配置Slave主机
   images\cherry_red.png3 实验
      images\cherry_blue.png3.1 mysql授权问题
      images\cherry_blue.png3.2 1.单节点数据库
      images\cherry_blue.png3.3 2.主从同步
      images\cherry_blue.png3.4 3.实验(高可用)
         images\cherry_orange.png3.4.1 高可用keepalived
            images\cherry_cyan.png3.4.1.1 keepalived install
      images\cherry_blue.png3.5 4.实验(高可用+大并发)
         images\cherry_orange.png3.5.1 HAproxy代理
      images\cherry_blue.png3.6 4.实验(mycat-读写分离)
         images\cherry_orange.png3.6.1 mycat安装部署
         images\cherry_orange.png3.6.2 读写分离高可用
         images\cherry_orange.png3.6.3 mycat管理端口命令
      images\cherry_blue.png3.7 5.双主双从-读写分离-高可用
      images\cherry_blue.png3.8 6.mycat分库操作
      images\cherry_blue.png3.9 7.mycat分表
      images\cherry_blue.png3.10 8.mycat分库分表之下实现读写分离
   images\cherry_red.png4 Shell脚本编程
   images\cherry_red.png5 Zabbix监控
      images\cherry_blue.png5.1 zabbix设置邮件报警--自定义报警媒介
      images\cherry_blue.png5.2 zabbix解决中文界面乱码问题
      images\cherry_blue.png5.3 ziabbix自带的template Linux OS
      images\cherry_blue.png5.4 zabbix-agent自定义收集数据
      images\cherry_blue.png5.5 zabbix监控Nginx性能
      images\cherry_blue.png5.6 综合配置
      images\cherry_blue.png5.7 实验:监控nginx端口实现告警
   images\cherry_red.png6 ELK日志分析
      images\cherry_blue.png6.1 PS
      images\cherry_blue.png6.2 es-head插件安装
      images\cherry_blue.png6.3 安装filebeat nginx日志模板



===浮点数 与 定点数 :===================


images\14-1.png




### 浮点数 #############################################

用于存储用户的身高、体重、薪水等,不具备超高精度要求的数据


浮点数是用来表示实数的一种方法,它用 M(尾数) * B( 基数)的E(指数)次方来表示实数,相对于定点数来说,
在长度一定的情况下,具有表示数据范围大的特点。
但同时也存在误差问题。如果希望保证值比较准确,推荐使用定点数数据类型。


MySql中的浮点类型有float,double。他们定义方式为:FLOAT(M,D)DOUBLE (M,D)
M表示十进制数字总的个数,D 表示 其中 小数点后面数字的位数, M 和 D又称为精度标度


“(M,D)”表示该值一共显示M位整数,其中D位 位于小数点后面。
例如,定义为 FLOAT(7,4) 的一个列可以显示为 -999.9999。 999.9999

MySQL保存值时进行四舍五入,因此如果在 FLOAT(7,4) 列内插入999.00009,近似结果是 999.0001。

FLOAT 和 DOUBLE中的 M 和 D 的取值默认都为 0,即除了最大最小值,不限制位数。

M、D范围如下:
M取值范围为0~255。FLOAT只保证 6位 有效数字的准确性,所以 FLOAT(M,D)中,M<=6时,数字通常是准确的。如果M和D都有明确定义,其超出范围后的处理同decimal。

D取值范围为0~30,同时必须 <=M。double只保证 16位 有效数字的准确性,所以DOUBLE(M,D)中,M<=16时,数字通常是准确的。
如果M和D都有明确定义,其超出范围后的处理同decimal。

FLOAT和DOUBLE中,若 M 的定义分别超出 7和 17 ,则多出的有效数字部分,取值是不定的,通常数值上会发生错误

因为浮点数是不准确的,所以我们要避免使用“=”来判断两个数是否相等。






### 优先满足小数位,少补,多 四舍五入


========== 测试 ======================

mysql> create table test4(float_test float(5,2)); //一共5位,小数占2位 000.00 -- 999.99
Query OK, 0 rows affected (0.00 sec)

mysql> desc test4;
+------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| float_test | float(5,2) | YES | | NULL | |
+------------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into test4 values (10.2 ), (70.243), (70.246);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from test4;
+------------+
| float_test |
+------------+
| 10.20 |
| 70.24 |
| 70.25 |
+------------+
3 rows in set (0.00 sec)

mysql> insert into test4 values (1111.20); ### 优先满足小数位,少补,多 四舍五入
ERROR 1264 (22003): Out of range value for column 'float_test' at row 1





### 定点数DECIMAL #######################################

定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。

DECIMAL用于保存必须为确切精度的值。

使用方式如下: salary DECIMAL(5,2) 接受: 500.01

下面的介绍将基于上面这个例子。
我们看到其中有两个参数,即DECIMAL(M,D),其中 M表示十进制数字总的个数,D表示小数点后面数字的位数, M 和 D又称为精度和标度
上例中的取值范围为 - 999 . 99 ~ 999 . 99。 不带符号 000.00 ~ 999.99

如果存储时,整数部分超出了范围(如上面的例子中,添加数值为1000.01),MySql就会报错,不允许存这样的值。


如果存储时,小数点部分若超出范围,就分以下情况:

若四舍五入后,整数部分没有超出范围,则只警告,但能成功操作并四舍五入删除多余的小数位后保存。如999.994实际被保存为999.99
999.996
若四舍五入后,整数部分超出范围,则MySql报错,并拒绝处理。如999.995和-999.995都会报错。

M的默认取值为 10D默认取值为 0。如果创建表时,某字段定义为 decimal类型不带任何参数,等同于 decimal(10,0)。带一个参数时,D取默认值。

M的取值范围为1~65,取0时会被设为默认值,超出范围会报错。
D的取值范围为0~30,而且必须<=M,超出范围会报错。
所以,很显然,当M=65,D=0时,可以取得最大和最小值。

decimal (65,0)
decimal (65,30)



定点数decimal测试:------------------------------------------------

mysql> create table test5(decimal_test decimal(5,2));

mysql> insert into test5 values (70.245);
Query OK, 1 row affected, 1 warning (0.05 sec)

mysql> show warnings; ##显示系统的警告信息。
+-------+------+---------------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------------+
| Note | 1265 | Data truncated for column 'decimal_test' at row 1 |
+-------+------+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from test5;
+-------+
| num |
+-------+
| 70.25 |
| 70.25 |
+-------+



2000.00
1500000.00






数据定义 : ==================================

float(M,S) M为全长,S为小数点后长度。float 不精准的例子如下:

mysql> create table t1(c1 float(10,2), c3 decimal(10,2));

Query OK, 0 rows affected (0.02 sec)
mysql> insert into t1 values(9876543.21, 9876543.12);
Query OK, 1 row affected (0.00 sec)

images\14-2.png




总结对比:========================================


定点数 decimal (M,D) :不存在精度偏差。 取值 65 小数最大支持 30位,


浮点数:在一定范围内能保证精确,超出的范围,可能会出现存取的偏差。

float(M,D) M 小于等于 6 ,能保证精确
double(M,D) M 小于等于 16 ,能保证精确

占用空间: float 4字节 double 8字节 decimal (M,D) M+2 个字节。


对小数部分的处理机制一样: 优先处理小数部分内容(不够小数位,则补0 ,超出的小数位,则按照四舍五入自动截断。)

(5,2) 1234.5 插入不成功 ,补0,超过总数 1234.50
(5,2) 999.996 插入不成功, 自动截断小数位,四舍五入加一 , 得到 10000.00 超出范围





Mysql 的严格模式 ,5.5 默认关闭,5.6 5.7 默认开启。===========================

vim /etc/my.cnf

[mysqld]
#添加
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES