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日志模板


NULL not null 空与非空 约束 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mysql中的null不是数据,也不是类型,只是标志属性。
用户说明 某个字段是否是null(null表示什么都不存)NULL采用 关键字NULL表示!(不是字符串) 是:NULL,而不是:' NULL' 注意引号

null 表示可以为空
not null 表示这个字段不能是空

表中,所有记录里面,尽量不要出现 “空值” ,大量空值会影响表的 读取和索引效率。

| name password
|手机
| 身份证

完善个人资料。 ====== 客户没有填写的字段, default x ==⇒ 字段。




unsigned 无符号位 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


无符号一般作用于数值类型

添加无符号
1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) UNSIGNED);

2)通过ALTER语句

ALTER TABLE t_user MODIFY user_id INT(10) UNSIGNED;

删除无符号
ALTER TABLE t_user MODIFY user_id INT(10);




default ,默认属性,默认值约束 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


采用default关键字,在该字段没有赋值的时候设置默认值;
如果一个字段没有默认值就为 null
默认值存在一些特殊的关键字 default也可以在值 中使用 函数, 例如 :

images\17-1.png


images\17-2.png




auto_increment 自动增长 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


用于主键并且是一个字段的 主键 ,才能使用 auto_increment
可以使字段从数字1开始的数逐一递增的,由系统自行管理,不需要人工干涉,可以保证 唯一性 ;

默认自动增长从1 开始,还可以给 int 、unsigned
如果后面对自动增长再赋值的话就按照赋值之后的继续自动增长;


CREATE TABLE XXX (ID INT(5) PRIMARY KEY AUTO_INCREMENT) AUTO_INCREMENT=100;

ALTER TABLE XXX AUTO_INCREMENT=100; 修改自增值,但是要大于目前表中的 的自增值。

注:There can be only one auto column and it must be defined as a key.
一张表只能有一个自增长列,并且该列必须定义了约束 (可以是主键约束,也可以是唯一约束,也可以是外键约束,但是不可以是非空和检查约束)
不过自增长一般配合主键使用,并且只能在数字类型中使用

images\17-3.png



primary key 主键约束 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(一般都会配合 auto_increment 出现)

主键可以保证记录的唯一,主键 域 自动为 NOT NULL(非空);

主键常常与外键构成参照完整性约束,防止出现数据不一致。
数据库管理系统对于主键自动生成唯一索引,所以
主键也是一个特殊的索引


但主键和唯一键又不是同一个概念;

• 主键一定是唯一性索引,唯一性索引并不一定就是主键。
• 一个表中可以有多个唯一性索引,但只能有一个主键。
• 主键列不允许空值,而唯一性索引列允许空值。

典型的就是在创建表的时候主动添加一个 无关的 无符号整型的数,充当主键;
比如说学生名字,性别,生日都可以冲突,我们可以指派一个无关序号作为学生的唯一标识,

主键 自动增长的特性,一般使用纯数字作为主键,不要用字符串,会导致检索速度减慢

唯一性,有序性。

主键
=======================================================================
ID 姓名 性别 年龄 监护人 住址 籍贯 身份证号码 考分 入学时间 处分记录
1
2 小明 4527301548945 450
3
4
5


### 建立主键约束1

1、字段后补充说明 create table stu_inform(id int,name varchar(20), grade double, primary key(id) );

2、紧跟着字段定义后指定 create table stu_inform(id int primary key,name varchar(20), grade double );


create table stu_inform(id int,name varchar(20),grade double, primary key(id,name) ); ## 联合主键

insert into stu_inform values(1,'张三',100.00) , (1,'李四',100.00); 可以插入
insert into stu_inform values(1,'张三',100.00),(1,'张三',100.00); //Error

主键A+主键B = 结果C 结果C 不同,就能接收。

观察 mysql.user 表中, host user 做成了联合主键

|
===========
| |
root server1
zhang3 server1
zhang3 server2

这是因为这是一个联合主键,它的作用是id不能重复姓名也不能重复,注意是且。


### 删除主键

因为主键也属于表结构的一部分,所以对主键操作就是操作表结构;

ALTER TABLE t_user DROP PRIMARY KEY; ## DELETE 仅用于删除数据记录

注:主键约束相当于 (唯一约束+非空约束)

( 多个主键 VS 联合主键 )
一张表中最多有一个主键约束(单独字段,联合字段),如果设置多个主键,就会出现如下提示: Multiple primary key defined !!!
删除主键约束前,如果有自增长属性 ,则 需要先删除自增长属性 , 如果不删除自增长就无法删除主键约束


删除auto-increment 语法如下:

## id 字段原先已经具备 auto-increment 属性。
alter table aaa modify id int(11);

#这里用的modify,只改变数据类型,也可以用change,改变列名的同时输入新的数据类型。
然后再实行 删除主键动作即可






unique key 唯一键 约束 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


添加唯一约束,则该列的值不能出现重复值,
而且唯一键的列,允许有 空值 , 主键不允许出现空值。
允许出现多个唯一键。


ID 用户名 邮箱
主键 唯一键 唯一键

建表时直接添加
CREATE TABLE t_user(user_id INT(10), UNIQUE KEY(user_id));

通过修改方式添加

images\17-4.png



删除唯一约束
ALTER TABLE t_user DROP unique key user_id; 删除列的索引,相当于删除了唯一键属性。





FOREIGN KEY 外键约束 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

主表 对应的字段(被参照字段)只能是 主键 或者 唯一约束修饰的字段


首先创建两张表:class , students

主表:------------------------------------------------------------------

CREATE TABLE class(
cla_id INT AUTO_INCREMENT PRIMARY KEY,
cla_name VARCHAR(30) NOT NULL UNIQUE
);

课程表:

cla_id cla_name
--------------------------
1 主机
2 运维
3 开发
4 oracle
5 H5
6 java


从表:------------------------------------------------------------------

CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name CHAR(10) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
classid TINYINT,
CONSTRAINT fk_classid FOREIGN KEY(classid) REFERENCES class(cla_id) #添加外键约束
);

stu_id stu_name classid
1 zhang3 1
2 li4 1
3 wang5 1
4 zhao6 5
5 小王 6


fk_classid 外键名称
REFERENCES 参考对象,形成 主从 级联关系。

修改的方式添加外键:

ALTER TABLE students ADD CONSTRAINT fk_classid FOREIGN KEY(classid) REFERENCES class(cla_id);

#外键中的级联关系有以下几种情况:
#ON DELETE CASCADE 删除主表中的数据时,从表中的数据随之删除: 同步删除
#ON UPDATE CASCADE 更新主表中的数据时,从表中的数据随之更新: 同步更新
#ON DELETE SET NULL 删除主表中的数据时,从表中的数据置为空: 删除置空
#默认 删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除 : 删除前检测从表

CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
classid INT(10),
CONSTRAINT fk_classid FOREIGN KEY(classid) REFERENCES class(cla_id) ON DELETE CASCADE
);


删除外键约束
ALTER TABLE students DROP FOREIGN KEY fk_classid ;


1、外键 两个 参照 字段的 字段类型,要求必须是一致的
2 、 被参照字段,必须是一个 主键,或者是 唯一键。
3、 注意 空值的影响。



注:插入数据时,先插入主表中的数据,再插入从表中的数据。
删除数据时,先删除从表中的数据,再删除主表中的数据。



Comment 字段注释描述 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

create table type_com( id int comment "这里是注释", sn varchar(255) );


ZEROFILL (零填充) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

零填充会将 有效位以外的位用零来显示,比如某字段数据类型为INT(5),而插入的值为2,那么零填充会显示00002
但是,这个效果在Navicat for MySQL中显示不出来,只有在DOS窗口下才能显示


添加零填充
1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) ZEROFILL);

2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) ZEROFILL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) ZEROFILL;

删除零填充
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);

0001
0002
0003
0025
9999

入场券,抽奖券: No.000000045



null not null unsigned unique key primary key foreign key auto_increment comment zerofill default