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



























 

分享到:
评论

相关推荐

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

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

    高性能MySQL(第3版).part2

    第7章MySQL高级特性259 7.1分区表259 7.1.1分区表的原理260 7.1.2分区表的类型261 7.1.3如何使用分区表262 7.1.4什么情况下会出问题263 7.1.5查询优化266 7.1.6合并表267 7.2视图270 7.2.1可更新视图272 ...

    MySQL基础教程-绝对推荐

    MySQL基础教程 初学者半路出家都有很好的帮助

    PHP与MySQL程序设计(带完整书签)

    《php与mysql程序设计(第4版)》是全面讲述php 与mysql 的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。《php与mysql程序设计(第4版)》涵盖了两...

    PHP和MySQL Web开发第4版pdf以及源码

    第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么...

    PHP和MySQL WEB开发(第4版)

    第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么时候生效 ...

    MySQL基础教程

    MySQL入门级教程,数据库的安装、建库、建表、基本增删该查操作

    PHP和MySQL Web开发第4版

    第12章 MySQL高级管理 12.1 深入理解权限系统 12.1.1 user表 12.1.2 db表和host表 12.1.3 tables_priv表,columns_priv表和procs_priv表 12.1.4 访问控制:MySQL如何使用Grant表 12.1.5 更新权限:修改什么...

    NoSQL数据库技术实战

    Amazon的高可用键值对存储、LevelDb——出自Google的Key-Value数据库、Redis实战、面向文档的数据库CouchDB、MongoDB实战、MySQL基础、MySQL高级特性与性能优化。 本书涉及面广,从基本操作到高级技术和核心原理,再...

    PHP程序设计第2版

    第7章 高级OOP特性 第8章 错误和异常处理 第9章 字符串和正则表达式 第10章 处理文件和操作系统 第11章 PEAR 第12章 日期和时间 第13章 PHP 5.1 第14章 表单和导航提示 第15章 处理文件上传 第16章 网络 第17章 PHP...

    java后端学习推荐书籍清单

    《深入理解Java虚拟机:JVM高级特性与最佳实践》 《深入理解计算机系统(原书第三版》《Netty权威指南 第2版》 《Netty 4核心原理与手写RPC框架实战》 《MyBatis技术原理与实战》 《大话设计模式》 《高性能MySQL》 ...

    基于SSH2+Maven+EasyUI+MySQL技术实战开发易买网电子商务交易平台

    使之提供更加高效和友好的用户接口,越来越多的企业和开发人员选择使用富客户端技术构建商业应用,本课程主要是介绍了解最流行的富客户端框架jquery - easyUI API及熟悉掌握其高级特性,并结合SSH2框架与Maven实现...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料;本资料仅用于学习。 【课程内容】 第1周 开课介绍 python发展介绍 第一个python程序 变量 字符编码与二进制 字符编码的区别与介绍 用户交互程序 if ...

    PHP程序设计(第2版) 英文

    第1章 PHP概述 第2章 安装配置Apache和PHP&lt;br&gt;第3章 PHP基础 第4章 函数 第5章 数组 第6章 面向对象的PHP&lt;br&gt;第7章 高级OOP特性 第8章 错误和异常处理 第9章 字符串和正则表达式 第10章 处理...

    全栈工程师开发8个阶段(27.32G)

    3.高级特性视频 ---第八章 ---第二章 ---第六章 ---第七章 ---第三章 ---第四章 ---第五章 ---第一章 4.mysql+JDBC ---jdbc ---mysql 5.jQuery制作网页特效 ---1.javaScript基础 ---2.javaScript操作BOM ---3....

    SQL_SERVER应用与开发范例宝典_12357672.part3

    涉及到SQLServer2000、SQLServer2005、Access、Oracle10g、MySql5.0和Postgresql8.2等6种数据库语言,内容包括SQL语言基础、常规数据查询、高级数据过滤、字符串查询、日期函数、日期函数、数据排序、聚集函数与分组...

    JDK15新特性系列课程

     熟练JDK15新特性,适应新的java开发需求。 课程简介:  1.Hidden Classes 2.EdDSA 数字签名算法 3.新的垃圾回收器ZGC 4.Text Blocks 标准化 5.密封类适合人群:   有一定的java基础,想快速从事java和大数据...

Global site tag (gtag.js) - Google Analytics