mysql-高级。
1 标题1 错误!未定义书签。
1.1 标题2 错误!未定义书签。
1.1.1 标题3 错误!未定义书签。
mysql中的sql编程的话题。
触发器, 存储函数, 存储过程。
以上的是三个名词, 在sql编程中, 地位是: 程序的载体, 程序的结果。
编程所涉及的要素:
变量, 数据类型, 流程控制, 函数, 运算符, 表达式。
mysql自动提供的函数!
例如: database(),now(),md5()
用户定义定义的, 存储在mysql中的函数。
适用语法:来创建函数。
drop function [if exists] function-name;
程序处理数据。
数据在程序中的容器, 就是变量。
强类型。函数外定义的变量。
变量不需要声明, 直接去设置即可!
ps, 内置的变量: set autocommit = off, 不以 @开头。
函数内定义的变量。
使用declare来声明。
不需要使用@, 表示是用户自定义变量。
强类型, 定义的局部变量, 必须定义为某种类型, 类型的表述与字段的类型一致!
局部内, 可访问到全局变量。
ps: 与js保持一致1
当需要为变量赋值的数据, **于sql中select语句的查询结果时, 可以使用select into完成变量的赋值。
一次性, 赋值多个变量:
函数内, 也可以使用。
循环和分支。
测试。结果。
不是分支, 是典型的三元运算, 的函数封装语法。
mysql不支持三元运算符 ?
测试。结果。
条件满足, 则循环继续。
其中标签, 用于在循环终止时, 一次性的终止多层循环! 类似于js的语法。
例如:终止当前循环:(continue), iterate
终止全部:(break), le**e
终止, 都需要配合循环语句的标签使用!
ierate:
le**e:
如果需要终止多层:
需要在后边跟随不同的标签即可。
与函数类似, 都是一段功能**的集合,称之为过程。
与函数不一样的是, 函数由于完成某个特定的操作点,例如, md5(),获取md5摘要信息, 不是用来实现某中也无路基操作, 而是就是实现特定的操作。过程是, 某个特定的业务逻辑。
当我们需要使用sql完成某件事时候, 使用过程, 而在过程的完成中, 需要一些特殊的操作, 就是函数。
例如: 需要插入, 1000条记录到某测试表中, 此时就应该创建过程。
而在插入的时候, 需要随机的获取学生的姓名, 就可以定义一个函数, 完成获取随机的学生姓名工作。
映射到php程序:
浏览器所请求的一个url, 对应的php**, 就是一段过程。 (例如, 商品添加, 用户注册), 就是过程。
而在完成这个过程中, 需要将用户的密码做md5处理, md5就是函数。
因此, 函数在意的是处理结果,函数具有返回值。而过程是一段执行, 不具有返回值。
语法。注意: 没有返回值参数有输入方式之分。
过程内的写法, 与函数是一致的。
过程的调用不能出现在表达式中, 需要使用独立的语法进行独立调用。
/ 表达式中。
max(class_id) +10;
需要用 call
in, out, inout, 表示, 过程的参数的数据的传递方向。
in: 由外向内传递。
out: 由内向外传递。
inout: 双向传递, 即可内向外, 也可外向内。
内, 外, 指的是, 过程外和过程内。
创建过程外的三个变量:
以三个变量作为实参, 调用过程:
在获取过程外三个变量的值:
inout双向传递, 类似于 php中的引用传递!
由于过程没有返回值, 需要在过程处理后, 得到过程的处理结果数据, 就因该, 使用带有out类型的参数。
一个数据时被多个过程连续处理, 典型的需要 inout类型的参数。
一个纯粹的mysql管理员需要完成某些操作, 需要使用过程, mysql自带的编程方式。
例如, 需要创建大量的测试数据, 可以过程完成:
确定测试表的结构。
确定需要插入的数据格式。
要求: 学号要从1开始递增。
班级id, 从1-100 随机。
姓名, 随机得来。
说明: 任意。
编程实现:编写, 需要的函数:
获取班级id
生成名字:生成信息。
生成学号。从1开始递增。
it-0000001
it-0000002
取得已有的最大学号。
调用过程即可:
测试数据。事件驱动程序: 监听元素某些事件, 当事件被触发时, 事件处理器被调用。
ps: 类似于js的事件驱动)
触发器的事件:
insert, delete, update
扩展开共六种:
before insert, after insert
before delete, after delete
before update, after update
事件都是记录对象的事件, row的before insert, row after insert.
语法。绑定事件处理器, 到 row元素上。
测试, 在学生表的添加事件上增加触发器程序:
一旦学生表添加, 则在学生日志表中, 加入一条记录。
检测学生日志表:
触发程序被自动调用。
触发器, 只是调用方式不同于存储过程而已, 都是功能的集合。
预定义的变量, 表示触发该事件的行对象。
就是事件源记录。
使用 new, old 来引用这个事件源记录。
new 和 old的区别:
new, 新纪录。
old, 旧记录。
只有在update事件时, 才会出现新旧记录同时存在的情况。
更新: 将旧记录更改成新纪录。
在 insert事件中, 只有new可用。 before insert, after insert , 都可以使用new.
在delete事件中, 只有 old可用。 before delete after delete 都可以使用 old
无论是 before还是insert都一样。
可能会出现执行一条语句 , 触发多个事件的情况。
有些语句, 带有逻辑判定功能:
replace into, 尝试插入, 如果冲突, 则替换(删除旧的,插入新的)
类似的: insert into on duplicate key update
冲突时更新。
一个表, 的一个事件, 仅仅可以绑定一个事件处理器。
一个表最多可以有6个触发器。
读写分离, 负载均衡。
设计:56.101, mysql 充当写服务器。
再添加2台linux充当读服务器:
初始化mac地址。
完全复制。复制后, 启动复制的服务器:
删除, 之前所保留的虚拟化网卡的文件, 使新生成的网卡生效。
修改 eth0的配置文件:
修改mac地址参数:
修改为, virtualbox生成的mac地址:
保持一致。init 6 重启。
在主服务器上开一个复制账号, 从服务器利用这个复制账号, 从主服务器进行复制。
配置过程如下:
保证唯一即可!
需要重启 mysqld
可以与步骤一一起完成)
登录主mysql, 增加账号, 刷新权限。
show master status
mysqld重启。
从服务器的mysql中执行:
使用 change master 来指定;
此时已经建立的主从复制联系。
在从服务器上执行:
start sl**e
MySql经典笔记
好久没有整理东西,感觉自己越来越懒,正好近期有个mysql的项目 一个oracle的应用迁移到mysql 以前没有接触过mysql,但是也知道mysql数据库目前广泛的应用在各种个人 商务系统中,各种技术都比较成熟。把自己学习的一些过程总结一下,该文章设计到的内容都没有做太详细的阐述,只是一个简单的...
MySql高级查询
高级查询。1.连接查询 对列的扩展 第一种形式。select from info,nation 会形成笛卡尔积。select from info,nation where 加入筛选条件。select from info,nation where 查询指定列。select as 代号 as 姓名 se...
MySQL学习笔记整理
数据库系统。databaxxxxsesystem 计算机系统中一种专门管理数据资源的系统。数据库里面的东西就是存储的一组经过处理后的数据。管理数据库的软件成为数据库管理系统。数据库 存数据的仓库。数据库管理系统 仓管员。dba databaxxxxseadministrator 数据库的分类。关系型...