MySQL高级教程笔记.docx
- 文档编号:7785653
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:8
- 大小:18.59KB
MySQL高级教程笔记.docx
《MySQL高级教程笔记.docx》由会员分享,可在线阅读,更多相关《MySQL高级教程笔记.docx(8页珍藏版)》请在冰豆网上搜索。
MySQL高级教程笔记
ThelatestrevisiononNovember22,2020
MySQL高级教程笔记
MySQL-高级
1概述
MySQL中的SQL编程的话题.
触发器,存储函数,存储过程
以上的是三个名词,在SQL编程中,地位是:
程序的载体,程序的结果.
编程所涉及的要素:
变量,数据类型,流程控制,函数,运算符,表达式.
2函数
2.1内置函数
MySQL自动提供的函数!
例如:
database(),now(),md5()
2.2自定义函数–存储函数
用户定义定义的,存储在MySQL中的函数.
2.2.1createfunction,创建函数
适用语法:
来创建函数
2.2.2调用函数
2.2.3dropfunction,删除函数
dropfunction[ifexists]function-name;
3变量–编程要素
程序处理数据.
数据在程序中的容器,就是变量.
强类型
3.1全局变量
函数外定义的变量
变量不需要声明,直接去设置即可!
PS,内置的变量:
setautocommit=off,不以@开头
3.2局部变量
函数内定义的变量
使用declare来声明.
不需要使用@,表示是用户自定义变量.
强类型,定义的局部变量,必须定义为某种类型,类型的表述与字段的类型一致!
3.3重叠(嵌套)作用域
局部内,可访问到全局变量
PS:
与JS保持一致1
3.4变量的赋值
3.4.1set变量=值
3.4.2selectinto变量
当需要为变量赋值的数据,来源于SQL中select语句的查询结果时,可以使用selectinto完成变量的赋值.
一次性,赋值多个变量:
函数内,也可以使用
4流程控制–编程要素
循环和分支
4.1分支-IF
测试
结果
4.1.1内置分支函数:
if()
不是分支,是典型的三元运算,的函数封装语法
MySQL不支持三元运算符:
.
4.2分支-CASE
测试
结果
4.3循环–while
条件满足,则循环继续
其中标签,用于在循环终止时,一次性的终止多层循环!
类似于JS的语法.
例如:
4.4循环–终止
终止当前循环:
(continue),iterate
终止全部:
(break),leave
终止,都需要配合循环语句的标签使用!
ierate:
leave:
如果需要终止多层:
需要在后边跟随不同的标签即可
5过程–存储过程–procedure
与函数类似,都是一段功能代码的集合,称之为过程.
与函数不一样的是,函数由于完成某个特定的操作点,例如,md5(),获取md5摘要信息,不是用来实现某中也无路基操作,而是就是实现特定的操作.过程是,某个特定的业务逻辑.
当我们需要使用SQL完成某件事时候,使用过程,而在过程的完成中,需要一些特殊的操作,就是函数.
例如:
需要插入,1000条记录到某测试表中,此时就应该创建过程.
而在插入的时候,需要随机的获取学生的姓名,就可以定义一个函数,完成获取随机的学生姓名工作.
映射到PHP程序:
浏览器所请求的一个URL,对应的PHP代码,就是一段过程.(例如,商品添加,用户注册),就是过程.
而在完成这个过程中,需要将用户的密码做md5处理,md5就是函数.
因此,函数在意的是处理结果,函数具有返回值.而过程是一段执行,不具有返回值.
语法
5.1创建过程:
createprocedure
注意:
没有返回值参数有输入方式之分.
过程内的写法,与函数是一致的.
5.2调用过程,call过程()
过程的调用不能出现在表达式中,需要使用独立的语法进行独立调用.
in:
由外向内传递
out:
由内向外传递
inout:
双向传递,即可内向外,也可外向内
内,外,指的是,过程外和过程内.
创建过程外的三个变量:
以三个变量作为实参,调用过程:
在获取过程外三个变量的值:
inout双向传递,类似于PHP中的引用传递!
由于过程没有返回值,需要在过程处理后,得到过程的处理结果数据,就因该,使用带有out类型的参数.
一个数据时被多个过程连续处理,典型的需要inout类型的参数.
6练习
一个纯粹的MySQL管理员需要完成某些操作,需要使用过程,MySQL自带的编程方式.
例如,需要创建大量的测试数据,可以过程完成:
确定测试表的结构
确定需要插入的数据格式
要求:
学号要从1开始递增.
班级ID,从1-100随机
姓名,随机得来
说明:
任意
编程实现:
编写,需要的函数:
获取班级ID
生成名字:
生成信息
生成学号
从1开始递增
it-0000001
it-0000002
取得已有的最大学号.
调用过程即可:
测试数据
7触发器–trigger
事件驱动程序:
监听元素某些事件,当事件被触发时,事件处理器被调用.
(PS:
类似于JS的事件驱动)
触发器的事件:
insert,delete,update
扩展开共六种:
beforeinsert,afterinsert
beforedelete,afterdelete
beforeupdate,afterupdate
事件都是记录对象的事件,row的beforeinsert,rowafterinsert.
语法
7.1创建触发器,createtrigger
绑定事件处理器,到row元素上.
测试,在学生表的添加事件上增加触发器程序:
一旦学生表添加,则在学生日志表中,加入一条记录
检测学生日志表:
触发程序被自动调用
触发器,只是调用方式不同于存储过程而已,都是功能的集合.
7.2删除触发器droptriggertigger-name
7.3new,old
预定义的变量,表示触发该事件的行对象.
就是事件源记录.
使用new,old来引用这个事件源记录.
new和old的区别:
new,新纪录
old,旧记录.
只有在update事件时,才会出现新旧记录同时存在的情况.
更新:
将旧记录更改成新纪录.
在insert事件中,只有new可用.beforeinsert,afterinsert,都可以使用new.
在delete事件中,只有old可用.beforedeleteafterdelete都可以使用old
无论是before还是insert都一样.
7.4事件的触发
可能会出现执行一条语句,触发多个事件的情况.
有些语句,带有逻辑判定功能:
replaceinto,尝试插入,如果冲突,则替换(删除旧的,插入新的)
类似的:
insertintoonduplicatekeyupdate
冲突时更新
一个表,的一个事件,仅仅可以绑定一个事件处理器.
一个表最多可以有6个触发器.
8架构
读写分离,负载均衡.
8.1读,写服务器分离
设计:
MySQL充当写服务器.
再添加2台linux充当读服务器:
初始化mac地址
完全复制
复制后,启动复制的服务器:
删除,之前所保留的虚拟化网卡的文件,使新生成的网卡生效.
修改eth0的配置文件:
修改mac地址参数:
修改为,virtualbox生成的mac地址:
保持一致
init6重启
8.2读从写服务器复制数据
在主服务器上开一个复制账号,从服务器利用这个复制账号,从主服务器进行复制.
配置过程如下:
8.2.1主服务器
8.2.1.1开启二进制日志
8.2.1.2指定唯一的服务器ID
保证唯一即可!
需要重启mysqld
(可以与步骤一一起完成)
8.2.1.3增加复制账号
登录主MySQL,增加账号,刷新权限.
8.2.1.4记录当前状态位置
showmasterstatus
8.2.2从服务器
8.2.2.1指定服务器的唯一ID
mysqld重启
8.2.2.2开启复制
从服务器的MySQL中执行:
使用changemaster来指定;
此时已经建立的主从复制联系
8.2.2.3开启复制
在从服务器上执行:
startslave
8.2.2.4查看复制状态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 高级 教程 笔记