zoukankan      html  css  js  c++  java
  • 10、mysql其它常用

    1、视图:开发中不常用

      给某个常用的查询语句设置别名,方便使用

      创建:create  view  视图名称 as  SQL

      修改:alter view  视图名称  as  SQL

      删除:drop  view  视图名称

      视图是虚拟的而非物理表。

    2、触发器:开发中不常用

      执行增删改语句,自动执行设置的关联语句

      触发器中类:insert,delete,update

      触发时机:before,after

      关键字:new:insert,update中;old:delete,update中

      例:before  insert触发

    delimiter //        更改语句结束符为//
    create trigger t1 before insert on class for each row begin insert into student values(0,'sdf',12,3);
    end//
    t1是触发器名称,在插入语句执行之前执行begin和end间语句,注意:each row 表示每插入一条记录,就执行一次触发器
    delimiter ;         语句结束符改回 ;

      new关键字:在将插入到class中的name,也插入到student中

    create trigger wwww before insert on class for each row begin insert into student values(0,new.name,12,3); end//

      删除触发器:

    drop trigger t1;

    3、函数

      (1)内置函数:

    select curdate();   yyyy-mm-dd
    
    select char_length('sdf');  字符串长度
    
    mysql> select concat('asdf','123');
    +----------------------+
    | concat('asdf','123') |
    +----------------------+
    | asdf123              |
    +----------------------+
    
    时间格式化:
    mysql> select date_format(curdate(),'%Y-%m');select curdate();
    +--------------------------------+
    | date_format(curdate(),'%Y-%m') |
    +--------------------------------+
    | 2018-03                        |
    +--------------------------------+
    1 row in set
    
    +------------+
    | curdate()  |
    +------------+
    | 2018-03-14 |
    +------------+
    1 row in set

      时间格式化:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

      (2)自定义函数:

    delimiter //
    create function f1(i1 int,i2 int) returns int
    begin declare num int default 0;set num = i1 + i2;return num;end //
    
    mysql> select f1(1,45);
    +----------+
    | f1(1,45) |
    +----------+
    |       46 |
    +----------+

      注意:1、函数有返回值;2、函数内不能写如select等语句

    4、存储过程

    存储过程是指保存在mysql上的一个别名,它代指的是事先写好的,实现一定功能的一堆sql语句。以后通过该别名执行。

    视图也是别名,但是是把视图当作一张表(临时结果集)来调用的,视图只能查询;存储过程直接通过别名来调用,别名代表一系列操作(查,改等)

    存储过程是为了减少直接写sql语句

    可通过远程传入存储过程名执行数据库操作

      a、简单存储过程

       delimiter //
        create procedure f1()
        begin
            select * from student;  #查
            insert into class(name) values('yiban');  #插入
        end //
        delimiter ;
    
        mysql中使用:call f1();
        pymysql使用:cursor.callproc('f1')

      

      传参数:in,out,inout关键字

      b、in

      delimiter //
        create procedure f2(
        in n1 int,
        in n2 int
        )
        begin
            select * from student where id > n1;
        end //
        delimiter ;
    
        mysql中使用:call f2(4,6);  #n2没有利用,也要传入
        pymysql使用:cursor.callproc('f1',(4,6))

      c、in,out  #存储过程没有return,可以用out返回值

    delimiter //
    create procedure f3(
    in n1 int,
    out n2 int  #变量
    )
    begin
        set n2 = 123456
        select * from student where id > n1;
    end //
    delimiter ;
    
    set @v1 = 0;    #session级别的全局变量

    mysql中使用:call f3(4,@v1); #n2必须是变量 查看:select @v1; #输出 123456 pymysql使用:cursor.callproc('f3',(4,2)) cursor.excute('select @_f3_0,@_f3_1')

      d、inout

      e、事务(原子性操作),要不全部执行,要不全部不执行

      f、游标

      g、动态执行sql(防sql注入)

    特性:1、可传参数 in,out,inout

        2、pymysql结合

        3、没有return;out 可用于标识存储过程的执行结果 

    5、索引

    6、ORM操作

    渐变 --> 突变
  • 相关阅读:
    SpringCloud高可用和高并发
    时间重要性,我们需要如何利用极致
    Spring是什么 包括SpringBean SpringMVC SpringBoot SpringCloud
    Java 线程的基本使用
    JVM 内存模型
    Java 8 ArrayList 详解
    Java 8 HashMap 源码解析
    Docker 运行 MySQL,使用 docker-compose
    Spring Boot 主从读写分离
    Spring Boot 整合 MyBatis 实现乐观锁和悲观锁
  • 原文地址:https://www.cnblogs.com/lybpy/p/8542777.html
Copyright © 2011-2022 走看看