1 _Mysql高级.001.理解触发器
商品表 goods 订单表 org
1
delimiter$
create trigger t1
after
insert
on org for each row
begin
update goods set num=num-2 where gid = 1;
end$
show triggers $ 显示触发器 此时的结束符已从;变为$
2 _Mysql高级.003.触发器中引用行变量
delimiter$
create tigger t1
alter
insert
on org for each row
begin
update goods set num=num-new.much where gid=new.gid;
end$
truncate goods; 清空数据
drop tigger t2; 删除触发器
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
恢复订单
delimiter$
create tigger t2
after
delete
on org for each row
begin
update goods set much=much+old.num where gid=old.gid;
end$
3 _Mysql高级.004.再谈行变量
delimiter$
create tigger t3
before
update
on org for each row
begin
update goods set much=much+old.num-new.num where gid=old.gid
end$
4 _Mysql高级.005.触发器做简单编程
触发器before 与 after
delimiter$
create trigger t4
before
insert
on org for each row
begin
declare int rnum;
select num into rnum where gid=new.gid;
if new.num > rnum then
set new.num=rnum
end if;
update goods set num=much-new.num where gid=new.gid;
end$
5 _MySQL高级.006.for each row是干吗的
触发器分为 行级触发器 和 语句级触发器
行级触发器 影响了多少行就会触发多少次 语句级 则是执行了多少次语句
触发几次。
1 for each row 行级触发器 mysql目前不支持语句级触发器
所以去除for each row 会发生语法错误。
6 _MySQL高级.007.存储过程概念
过程 与 函数的区别
函数有返回值 过程没有返回值
过程-----把若干条sql封装起来 就叫过程
存储过程----- 把过程存储到数据库中
1 create procedure procedureName()
begin
end;
2 show procedure status; 查看
3 call procedureName(); 调用
7 _MySQL高级.008.引入变量与控制结构
1 过程中声明变量
declare age int default 20;
2 delimiter$
create procedure p2()
begin
declare age int default 18;
declare height int default 180;
select concat('身高',height,'年龄',age);
end$
3 create procedure p3()
begin
declare age int default 18;
set age := age + 20;
select concat('20年后年龄是',age);
end$
4 if/else 控制结构
create procedure p4()
begin
declare age int default 18;
if age >= 18 then
select '成年';
else select '未成年';
end if;
end$
8 _MySQL高级.009.存储过程的参数传递
1 存储过程传参数
delimiter$
create procedure p5(width int,height int)
begin
select concat('your area is ',width*height) as area;
if(width>height) then
select '宽';
elseif(width < height) then
select '高';
else then
select '方';
end if;
end$
9 _MySQL高级.010.过程中使用循环结构
顺序 选择 循环
1 1-100
delimiter $
create procedure p6()
begin
declare total int default 0;
declare num int default 0;
while num <= 100 do
set total := total +num;
set num := num+1;
end while;
select concat('the total is ',total) as res;
end$
2 in 型参数 可以不写in标记
create procedure p7(in n int)
begin
declare total int default 0;
declare num int default 0;
while num <= n do
set total := total + num;
set num := num+1;
end while;
select concat('the total is ',total) as res;
end$
3 out型参数
传入参数 /传出参数
create procedure p8(in n int,out total int)
begin
declare num int default 0;
set total := 0;
while num <= n do
set total:= total+num;
set num := num +1;
end while;
select concat('the total is ',total) as res;
end$
call p8(100,@sum)$
select @sum // 5050
4 inout 参数
create procedure p9(inout age int)
begin
set age := age+20;
end$
调用过程
set @curreAge = 18$
call p(@curreAge)$
select @curreAge
10 _MySQL高级.012.Case结构的用法
1 case
create procedure p10(pos int)
begin
case pos
when 1 then
select 'flying.....';
when 2 then
select 'has down';
else
select 'nobody known it ';
end case;
end$
floor(rand()*7) // 0-7
11 _MySQL高级.013.repeat循环结构
1 create procedure p11()
begin
declare total int default 0;
declare num int default 0;
repeat
set num := num+1;
set total := total + num;
until num >100 end repeat;
select concat('repeat result is ',total) as res;
end$
12 _MySQL高级.014.游标的概念
1 declare /open / fetch /close
delimiter $
create procedure p12()
begin
declare row_id varchar(50) default 'id';
declare row_name varchar(50) default 'name';
declare row_password varchar(50) default 'pass';
declare getuser cursor for select id,name,password from ls_user;
open getuser;
fetch getuser into row_id,row_name,row_password;
select row_id,row_name,row_password;
close getuser;
end$
13 _MySQL高级.015.游标循环
声明变量 一定要在 声明游标之前
create procedure p13()
begin
declare row_id varchar (50) default 'id';
declare row_name varchar(50) default 'name';
declare row_password varchar(50) default 'password';
declare count int default 0;
declare i int default 0;
declare getuser cursor for select id,name,password from ls_user;
select count(*) from ls_user into count;
open getuser;
repeat
set i := i+1;
fetch getuser into row_id,row_name,row_password;
select row_id,row_name,row_password;
until i >=count end repeat;
close getuser;
end$
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1
mysql 触发事件
mysql 允许声明 触发事件 改变变量值
declare continue handler 来操作一个越界标示
declare continue handler for NOT FOUND statement;
越界标识必须在游标声明之后声明
create procedure p14()
begin
declare row_id varchar (50) default 'id';
declare row_name varchar(50) default 'name';
declare row_password varchar(50) default 'password';
declare you int default 1;
declare getuser cursor for select id,name,password from ls_user;
declare continue handler for NOT FOUND set you := 0;
open getuser;
repeat
fetch getuser into row_id,row_name,row_password;
select row_id,row_name,row_password;
until you=0 end repeat;
close getuser;
end$
14 _MySQL高级.017.对比continue与exit的区别
1 前面一节 declare continue handler NOT FOUND set you := 0;
虽然可以完成逻辑,但是在最后一行取出时会发现,重复取出。
可以使用 exit触发事件 解决这个问题。
delimiter $
create procedure p15()
begin
declare row_id varchar (50) default 'id';
declare row_name varchar(50) default 'name';
declare row_password varchar(50) default 'password';
declare you int default 1;
declare getuser cursor for select id,name,password from ls_user;
declare exit handler for NOT FOUND set you := 0;
open getuser;
repeat
fetch getuser into row_id,row_name,row_password;
select row_id,row_name,row_password;
until you = 0 end repeat;
close getuser;
end$
continue exit 之外 还有undo handler
continue 触发之后 后面的语句继续执行
exit 触发之后 后面的语句不在执行
undo 触发之后 前面的语句撤销 (目前mysql还不支持undo)
15 _MySQL高级.018.游标循环读取的正确逻辑
1
16 _MySQL高级.019.MySQL权限检查原理
17 布尔教育_MySQL高级.022.主从复制原理
1 主服务器配置binlog
2 从服务器配置relavlog
3 从主服务器读取到的binlog 转换为自身可执行的relavlog(授权)
4 执行relavlog
具体操作步骤
1 编辑 my.conf
1 由于数据复制可能会发生在主主之间 主从复制 一主多从等模式
为避免发生混乱 所以需要给每台MySQL数据 标记唯一的id
#server-id=10.211.2.109
2 这里把109服务器 配置为主,所以配置其log-bin
#log-bin=mysql-bin mysql-bin 为日志名称
3 二进制日志的格式
格式分为 混合模式 mixed,行级row,块statement
#binlog-format=row/statement/mixed
row :二进制记录的是磁盘的变化
statement:二进制记录语句 如 update 。。。
如何取舍?
update age=age+3 where id=9;//语句长而磁盘变化山,宜使用row
update age =age+3;//语句端 但影响上万十万行 磁盘变化大,宜使用statement
如果取舍不定 请使用mixed ,由系统根据语句决定。
2 从服务器配置
1 server-id=10.244.2.110
2 log-bin=mysql-bin #从服务器也开启bin日志的原因是为了备份日志文件
以及 可以从 从服务器往下再配置从服务器的从。
3 relay-log=mysql-relay
4 binlog-format=mixed
3 启动两台主从服务器即可。
109 :show master status 查看主日志
110:show slave status
主服务器授权 假定我们要建立的这个账户为repl,密码为repl,
mysql>grant replcation client,replication slave on *.* to repl@'192.168.1.%' identified by 'repl'
mysql>flush privileges;
从服务器上配置主服务器地址
mysql>change master to
master_host='10.244.2.110',
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.00001' #此文件为从哪个bin开始读取 具体在主服务器查看 show master status
master_log_pos=348; #此标记为已经读取到了哪个位置 具体在主服务器查看 show master status
从服务器查看连接状态 show slave status;
状态正确 从服务器 启动 MySQL>start slave;
查看 mysql>show slave status;没有错误 注意防火墙
此为最简单的主从复制,其他模式还有 被动主主复制、主主互为主从关系、主主互为主从关系然后主主各自还有从服务器
、环形复制
相关推荐
5. **高级特性**: - **视图**:创建虚拟表,简化复杂查询并提供安全性。 - **存储过程**:预编译的SQL语句集合,可提高执行效率,封装业务逻辑。 - **索引**:提升查询速度,`INDEX`或`CREATE INDEX`创建索引。 ...
通过《周阳老师 MySQL高级 脑图》的学习,你将能够全面掌握MySQL的高级特性,提升数据库设计、管理、优化及故障排查能力,为你的项目和职业生涯增添价值。尚硅谷的这套资料将是你学习MySQL高级知识的有效辅助工具。
【尚硅谷周阳Mysql高级思维导图脑图学习笔记】是针对MySQL数据库系统的一份高级学习资料,包含了丰富的知识体系,旨在帮助学习者深入理解并掌握MySQL的高级特性和优化技巧。这份资源以.mmap格式提供,这是一种专业的...
本教程"MySQL入门到高级-康师傅版.zip"旨在帮助初学者快速掌握MySQL的基础,并逐步提升至高级水平。尚硅谷教育机构的宋红康老师倾力打造,通过一系列深入浅出的讲解,使学习者能够全面了解和掌握MySQL的各个方面。 ...
综上所述,MySQL的不同版本为用户提供了多种选择,从基础的社区版到企业级的高级集群版,每个版本都有其独特的特性,以适应从个人项目到大规模企业应用的各种需求。用户可以根据自身的需求和预算选择合适的版本,...
《MySQL高级_JAVA版》是针对数据库管理员、Java开发者以及对MySQL有深入需求的技术人员的一份宝贵学习资源。这份资料详尽地介绍了MySQL在高级应用中的各种技术和实践,结合Java编程语言,帮助读者掌握如何在Java开发...
第七部 MySQL主从复制企业级深入高级应用实战(20节) 01-MySQL主从复制原理画图口头考试讲解.avi 02-课前思想-企业面试必胜绝招讲解.avi 03-MySQL主从复制故障多个案例实战讲解.avi 04-回顾MySQL主从复制配置步骤及...
1. MySQL 1.0 - 3.23:这是 MySQL 的早期版本,于 1995 年开始推出,支持基本的 SQL 语句和数据类型,但不支持事务和外键等高级功能。 2. MySQL 4.0 - 5.0:这个阶段推出了许多重要的功能,例如存储过程、触发器和...
文档内容涵盖的范围广泛,从基础概念到高级特性,适用于希望深入掌握MySQL的各种用户,无论是商业用户还是社区用户。 文档首先声明了它作为MySQL的参考手册的身份,重点是MySQL 5.5版本及其后续的更新版本(如...
MySQL 5.1 版本是这个教程关注的重点,它包含了一系列从基础到高级的主题,涵盖了数据库的安装、常用操作、脚本编写、字符集设置、论坛构建、远程管理、备份恢复、主从复制、故障处理、性能优化以及高可用性配置。...
通过系统学习,不仅可以掌握数据库的基础知识,还能了解到高级特性和最佳实践,为你的数据库管理生涯打下坚实的基础。同时,有交流群的存在,意味着你可以在遇到问题时得到及时的帮助和讨论,共同进步。
14. 其他高级特性:包括分区表、窗口函数、JSON支持、全文搜索等MySQL的高级功能。 通过《MySQL实战45讲》的学习,读者应该能够掌握MySQL的基础知识,并具备解决实际问题的能力。不过,实际应用中,理论知识与实践...
尚硅谷发布的"周阳版MySQL高级脑图完整版笔记"是学习MySQL高级特性和最佳实践的重要参考资料。下面我们将深入探讨脑图中的主要知识点。 1. **触发器(Triggers)** - 触发器是一种数据库对象,可以在特定的DML...
1. **MySQL 5.0**:这个版本引入了存储过程、触发器和视图等高级数据库功能,提升了数据库的复杂性处理能力。同时,支持InnoDB事务处理引擎,提高了数据一致性。 2. **MySQL 5.1**:增强了复制功能,支持并行复制,...
本教程秋季版将通过大量实例和练习,帮助学习者逐步掌握MySQL的基本操作和高级特性,为进一步深入学习数据库管理和开发打下坚实的基础。无论你是Web开发者、数据分析师还是系统管理员,这个教程都将是你提升技能不可...
总的来说,MySQL 5.7官方手册提供了从基本概念到高级特性、从安装指南到故障排除的全面知识,是MySQL用户不可或缺的参考资料。在学习和使用MySQL 5.7时,无论是对数据库有深厚基础的开发者,还是初次接触的新手,都...
随着MySQL服务器的不断升级,新的特性和功能不断引入,MySQL-Front的更新意味着它能够无缝对接这些新特性,如窗口函数、JSON字段支持、存储过程的优化等,使得开发者无需离开熟悉的前端界面就能利用这些高级功能。...