• mysql小结篇2(17.6.27)


    一、视图

      1.什么是视图,作用;

      答:获取一个select结果,并且生成一个虚拟的新表,然后就可以在这个新的表上继续操作;

        注意: 旧表数据更新,则虚拟表数据也跟着更新;

      

      2.创建

      DROP VIEW   IF EXISTS V1;   表示如果存在v1虚拟表删除。

      v1:自定义表名

      括号内 执行select语句

      

    DROP VIEW
    IF EXISTS v1;
    
    CREATE VIEW v1 AS (SELECT * FROM tb1 WHERE nid < 3)
    

      3.使用视图

      当我们创建完成一个v1视图后,我们就可以对v1进行操作,因为v1是虚拟的表,所以表的内容是不能增删改的,只能查询。

    SELECT * from v1 where name = 'mary'
    

      4.删除虚拟表

    drop view v1
    

      5.修改

          修改过于麻烦,删了重写; 

    二、存储过程

      1.介绍:

        把复杂的sql语句给封装打包,调用方便 (就是一组SQL语句集,可以实现一些较为复杂的逻辑功能) ;

      2.创建:

    DROP PROCEDURE  
    IF EXISTS proc_p1;    #如果存在删除该存储过程
    delimiter \                  #更改结束符
     
    
    CREATE PROCEDURE proc_p1 (
    	IN m1 INT,
    	OUT m2 INT, 
    	INOUT m3 INT            # in  out inout  自己很迷糊
    )
    BEGIN                                #函数体   各种判断条件都要在began后面输入
    
    DECLARE n1 INT ;
    DECLARE n2 INT DEFAULT 10 ;
    IF m1 = 1 THEN
     SET n1 = m2 ;
    ELSEIF m1 = 2 THEN
     SET n1 =m3 ;
    ELSE
     SET n1 = 0;
    END IF ;
    SELECT n1;
    END\                                  #结束记着要加 \ 
    delimiter ;                            #恢复结束符

      3.查询

        a.Navicat for mysql 

    set @m = 15;    #设定参数
    set @n = 10;
    call proc_p1(1,@m,@n);   #执行存储过程
    SELECT @m      #查询参数
    

        b.python   不清楚

    import pymysql
    
    #创建连接
    conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='Www123...',db="6.27db")
    #创建游标
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.callproc('proc_p1',(1,2,3))
    ret = cursor.execute("select @_proc_p1_0,@_proc_p1_1,@_proc_p1_2")
    result = cursor.fetchone()
    conn.commit()
    cursor.close()
    conn.close()
    
    print(ret,result,)

    三、触发器

      1.介绍:

        对某个表进行操作(增、删、改)的之前和之后,会使另一个表也随之发生改变;

      2.创建

    delimiter $    #设置终止符号
    
    drop trigger if EXISTS tri_brfore_inset_tb1 $    #判断是否已经存在
    """
     # 设置插入前机制  
    1.tri_brfore_inset_tb1   取一个名字;
    2.before    说明是操作前还是操作后;
    3.insert     说明是 插入还是删除,显然这个例子是插入;
    4. no tb1   说明 只有tb1变 才会发生变化;
    5.began     这里面是说明 如果tb1 变了 指明另一个表也跟着变及要变什么;
    """
    CREATE TRIGGER tri_brfore_inset_tb1 BEFORE INSERT ON tb1 FOR EACH ROW  
    BEGIN 
    	INSERT INTO tb2 (favorate)
    VALUES
    	(new.name);
    END $                                        #对应的是begin    $ 表示终止了
        
    delimiter ;      #恢复了终止符号为;                              
    

      3.其它

        a.nwe   可以指定跟随者变的值是主人插入的最新值;

        b.old    可以指定跟随者变的值是主人刚删除的值;

      

    四、函数

    创建函数

    delimiter \      # 。。
    drop function if exists f1\   #。。
    
    create  function f1 (n int, m int) returns int   #创建函数 设定形参,及返回值的类型
    
    begin
    declare num int ;
    set num = n + m ; 
    return num ;              #指定返回值
    end\
    
    delimiter ;
    

    执行函数

      select f1(1,2) 即可

    五、内置函数

      。。。

    六、事物

      1.是什么

      答: 功能与python中的try 函数一样;  当发生错误时不执行。

      2.创建

    delimiter \
    create procedure p1(
        out p_return_code tinyint
    )
    begin 
      declare exit handler for sqlexception 
      begin 
        -- error 
        set p_return_code = 1; 
        rollback; 
      end; 
     
      declare exit handler for sqlwarning 
      begin 
        -- warning 
        set p_return_code = 2; 
        rollback; 
      end; 
     #
      start transaction; 
        update tb1 set telephone = telephone + 5 where `name`= 'coob1';
            update tb2 set favorate = favorate - 5 where nid<100;
      commit; 
     
      -- success 
      set p_return_code = 0; 
     
      end\
    delimiter ;
    示例

      3.在py_mysql中 pymysql模块中已经默认执行失误了,当sql语句出现错误时,自动报错。

    七、mysql 动态语句

  • 相关阅读:
    Kettle 实现mysql数据库不同表之间数据同步——实验过程
    Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)
    并查集知识总结
    c# 线程同步问题(about volatile)
    c# 线程的等待(堵塞)
    net中多线程返回值
    c# 中的 lock monitor mutex Semaphore 的比较
    c#两种同步结构
    links-some-blog
    T-SQL中的APPLY用法
  • 原文地址:https://www.cnblogs.com/learn-python-M/p/7086410.html
Copyright © 2020-2023  润新知