`
annan211
  • 浏览: 461037 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql 高级特性基础版

 
阅读更多

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;没有错误   注意防火墙
  
   此为最简单的主从复制,其他模式还有 被动主主复制、主主互为主从关系、主主互为主从关系然后主主各自还有从服务器
   、环形复制



























 

分享到:
评论

相关推荐

    MySQL数据库入门到高级笔记快速学习pdf版本

    5. **高级特性**: - **视图**:创建虚拟表,简化复杂查询并提供安全性。 - **存储过程**:预编译的SQL语句集合,可提高执行效率,封装业务逻辑。 - **索引**:提升查询速度,`INDEX`或`CREATE INDEX`创建索引。 ...

    周阳老师 MySQL高级 脑图 .mmap+pdf

    通过《周阳老师 MySQL高级 脑图》的学习,你将能够全面掌握MySQL的高级特性,提升数据库设计、管理、优化及故障排查能力,为你的项目和职业生涯增添价值。尚硅谷的这套资料将是你学习MySQL高级知识的有效辅助工具。

    尚硅谷周阳Mysql高级思维导图脑图学习笔记.rar

    【尚硅谷周阳Mysql高级思维导图脑图学习笔记】是针对MySQL数据库系统的一份高级学习资料,包含了丰富的知识体系,旨在帮助学习者深入理解并掌握MySQL的高级特性和优化技巧。这份资源以.mmap格式提供,这是一种专业的...

    MySQL入门到高级-康师傅版.zip

    本教程"MySQL入门到高级-康师傅版.zip"旨在帮助初学者快速掌握MySQL的基础,并逐步提升至高级水平。尚硅谷教育机构的宋红康老师倾力打造,通过一系列深入浅出的讲解,使学习者能够全面了解和掌握MySQL的各个方面。 ...

    Mysql版本特性比对.docx

    综上所述,MySQL的不同版本为用户提供了多种选择,从基础的社区版到企业级的高级集群版,每个版本都有其独特的特性,以适应从个人项目到大规模企业应用的各种需求。用户可以根据自身的需求和预算选择合适的版本,...

    MySQL高级_JAVA版.rar

    《MySQL高级_JAVA版》是针对数据库管理员、Java开发者以及对MySQL有深入需求的技术人员的一份宝贵学习资源。这份资料详尽地介绍了MySQL在高级应用中的各种技术和实践,结合Java编程语言,帮助读者掌握如何在Java开发...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    第七部 MySQL主从复制企业级深入高级应用实战(20节) 01-MySQL主从复制原理画图口头考试讲解.avi 02-课前思想-企业面试必胜绝招讲解.avi 03-MySQL主从复制故障多个案例实战讲解.avi 04-回顾MySQL主从复制配置步骤及...

    mysql mysql基础介绍

    1. MySQL 1.0 - 3.23:这是 MySQL 的早期版本,于 1995 年开始推出,支持基本的 SQL 语句和数据类型,但不支持事务和外键等高级功能。 2. MySQL 4.0 - 5.0:这个阶段推出了许多重要的功能,例如存储过程、触发器和...

    mysql官方文档5.5版

    文档内容涵盖的范围广泛,从基础概念到高级特性,适用于希望深入掌握MySQL的各种用户,无论是商业用户还是社区用户。 文档首先声明了它作为MySQL的参考手册的身份,重点是MySQL 5.5版本及其后续的更新版本(如...

    mysql入门到高级.docx

    MySQL 5.1 版本是这个教程关注的重点,它包含了一系列从基础到高级的主题,涵盖了数据库的安装、常用操作、脚本编写、字符集设置、论坛构建、远程管理、备份恢复、主从复制、故障处理、性能优化以及高可用性配置。...

    MySQL从入门到精通PPT大全(13份).rar

    通过系统学习,不仅可以掌握数据库的基础知识,还能了解到高级特性和最佳实践,为你的数据库管理生涯打下坚实的基础。同时,有交流群的存在,意味着你可以在遇到问题时得到及时的帮助和讨论,共同进步。

    Mysql45讲pdf版

    14. 其他高级特性:包括分区表、窗口函数、JSON支持、全文搜索等MySQL的高级功能。 通过《MySQL实战45讲》的学习,读者应该能够掌握MySQL的基础知识,并具备解决实际问题的能力。不过,实际应用中,理论知识与实践...

    shangguiguMySQL高级脑图完整版

    尚硅谷发布的"周阳版MySQL高级脑图完整版笔记"是学习MySQL高级特性和最佳实践的重要参考资料。下面我们将深入探讨脑图中的主要知识点。 1. **触发器(Triggers)** - 触发器是一种数据库对象,可以在特定的DML...

    MySQL各大版本新特性.rar

    1. **MySQL 5.0**:这个版本引入了存储过程、触发器和视图等高级数据库功能,提升了数据库的复杂性处理能力。同时,支持InnoDB事务处理引擎,提高了数据一致性。 2. **MySQL 5.1**:增强了复制功能,支持并行复制,...

    Mysql教程秋季版之夯实基础

    本教程秋季版将通过大量实例和练习,帮助学习者逐步掌握MySQL的基本操作和高级特性,为进一步深入学习数据库管理和开发打下坚实的基础。无论你是Web开发者、数据分析师还是系统管理员,这个教程都将是你提升技能不可...

    mysql 5.7 官方手册 高清完整版PDF

    总的来说,MySQL 5.7官方手册提供了从基本概念到高级特性、从安装指南到故障排除的全面知识,是MySQL用户不可或缺的参考资料。在学习和使用MySQL 5.7时,无论是对数据库有深厚基础的开发者,还是初次接触的新手,都...

    MySQL-Front最新版本

    随着MySQL服务器的不断升级,新的特性和功能不断引入,MySQL-Front的更新意味着它能够无缝对接这些新特性,如窗口函数、JSON字段支持、存储过程的优化等,使得开发者无需离开熟悉的前端界面就能利用这些高级功能。...

Global site tag (gtag.js) - Google Analytics