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操作

渐变 --> 突变
原文地址:https://www.cnblogs.com/lybpy/p/8542777.html