MySQL高级教程笔记.docx

上传人:b****5 文档编号:7785653 上传时间:2023-01-26 格式:DOCX 页数:8 大小:18.59KB
下载 相关 举报
MySQL高级教程笔记.docx_第1页
第1页 / 共8页
MySQL高级教程笔记.docx_第2页
第2页 / 共8页
MySQL高级教程笔记.docx_第3页
第3页 / 共8页
MySQL高级教程笔记.docx_第4页
第4页 / 共8页
MySQL高级教程笔记.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

MySQL高级教程笔记.docx

《MySQL高级教程笔记.docx》由会员分享,可在线阅读,更多相关《MySQL高级教程笔记.docx(8页珍藏版)》请在冰豆网上搜索。

MySQL高级教程笔记.docx

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查看复制状态

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1