1. 视图:某个查询语句设置别名,日后方便使用
    CREATE VIEW v1 as SELECT * FROM student WHERE sid >10
    -创建:
    create view 视图名称 as SQL
    视图是虚拟的
    -修改
    alter view 视图名称 as SQL
    -删除
    drop view 视图名称
  1. 触发器:当对某张表做:增删改操作的时候,可以使用触发器自定义关联行为
  2. # 插入前
  3. CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
  4. BEGIN
  5. ...
  6. END
  7.  
  8. # 插入后
  9. CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
  10. BEGIN
  11. ...
  12. END
  13.  
  14. # 删除前
  15. CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
  16. BEGIN
  17. ...
  18. END
  19.  
  20. # 删除后
  21. CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
  22. BEGIN
  23. ...
  24. END
  25.  
  26. # 更新前
  27. CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
  28. BEGIN
  29. ...
  30. END
  31.  
  32. # 更新后
  33. CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
  34. BEGIN
  35. ...
  36. END
  37.  
  38. delimiter //
  39. create TRIGGER t1 BEFORE INSERT on student for each ROW
  40. BEGIN
  41. INSERT into teacher(tname) VALUES('tim');
  42. END //
  43. delimiter ;
  44. --
  45.  
  46. INSERT INTO student(gender,class_id,sname) VALUES('女',2,'多长');
  47.  
  48. # NEW 代指新数据,在两张表中插入同样的数据
  49. # OLD 代指老数据 在两张表中删除和更新同样的数据
  50. -- delimiter //
  51. -- create TRIGGER t1 BEFORE INSERT on student for each ROW
  52. -- BEGIN
  53. -- INSERT into teacher(tname) VALUES(NEW.sname);
  54. -- END //
  55. -- delimiter ;
  1. 内置函数:
  2. 执行函数
  3. -- SELECT CURDATE() #日期
  4. -- SELECT CHAR_LENGTH('st') #字符串长度
  5. -- SELECT CONCAT('tim','ttutu','ssl') #拼接
  6. 时间格式化:
  7. SELECT DATE_FORMAT(date,format)
  8. SELECT DATE_FORMAT('2009-10-04', '%W %M %Y');
  9. 自定义函数:
  10. delimiter \\
  11. create function f1(
  12. i1 int,
  13. i2 int)
  14. returns int
  15. BEGIN
  16. declare num int;
  17. set num = i1 + i2;
  18. return(num);
  19. END \\
  20. delimiter ;
  1. # 存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。
    # 保存在MySQL上的一个别名---》一坨SQL语句
  2.  
  3. 方式一:
    Mysql:存储过程
    程序:调用存储过程
    方式二:
    mysql
    程序:sql语句
    方式三:
    mysql
    程序:类和对象(sql语句)
  4.  
  1. delimiter //
  2. CREATE PROCEDURE p1()
  3. BEGIN
  4. SELECT * FROM student;
  5. INSERT into teacher(tname) VALUES("ct");
  6. END //
  7. delimiter ;
  8. call p1()
  1. import pymysql
  2. conn = pymysql.connect(host='127.0.0.1',user='root',password='',database='homework666',charset='utf8')
  3. cursor = conn.cursor()
  4. cursor.callproc('p1',(12,2))
  5. conn.commit()
  6. result = cursor.fetchall()
  7. print(result)
  8. cursor.close()
  9. conn.close()
  1. 1. 简单
    create procedure p1()
    BEGIN
    select * from student;
    INSERT into teacher(tname) values("ct");
    END
  2.  
  3. call p1()
    cursor.callproc('p1')
    2. 传参数(in,out,inout
    delimiter //
    create procedure p2(
    in n1 int,
    in n2 int
    )
    BEGIN
  4.  
  5. select * from student where sid > n1;
    END //
    delimiter ;
  6.  
  7. call p2(12,2)
    cursor.callproc('p2',(12,2))
    3.参数out
    delimiter //
    create procedure p3(
    in n1 int,
    out n2 int
    )
    BEGIN
  8.  
  9. set n2 = 123123;
    select * from student where sid > n1;
    END //
    delimiter ;
    set @v1=123;
    call p3(12,@v1);
    SELECT @v1;
  1. import pymysql
  2. conn = pymysql.connect(host='127.0.0.1',user='root',password='',database='homework666',charset='utf8')
  3. cursor = conn.cursor()
  4. cursor.callproc('p3',(12,2))
  5. r1 = cursor.fetchall()
  6. print(r1)
  7. cursor.execute('select @_p3_0,@_p3_1')
  8. r2 = cursor.fetchall()
  9. print(r2)
  10. cursor.close()
  11. conn.close()
  1. # 事务:
  2. '''
  3. delimiter \\
  4. create PROCEDURE p5(
  5. OUT p_return_code tinyint
  6. )
  7. BEGIN
  8. DECLARE exit handler for sqlexception
  9. BEGIN
  10. -- ERROR
  11. set p_return_code = 1;
  12. rollback;
  13. END;
  14.  
  15. START TRANSACTION;
  16. DELETE from tb1;
  17. insert into tb2(name)values('seven');
  18. COMMIT;
  19.  
  20. -- SUCCESS
  21. set p_return_code =2;
  22.  
  23. END\\
  24. delimiter ;
  25. '''
  1. # 游标
  2. # 1、声明游标
  3. # 2、获取A表中数据
  4. # my_cursor select id,num form A
  5. # 3、for row_id,row_num in my_cursor:
  6. # 检测循环是否还有数据,如果无数据
  7. # break
  8. # insert into B(num) values(row_id+row_num)
  9. '''
  10. delimiter //
  11. create procedure p6()
  12. begin
  13. declare row_id int; -- 自定义变量1
  14. declare row_num int; -- 自定义变量2
  15. DECLARE done INT DEFAULT FALSE;
  16. declare temp int;
  17.  
  18. DECLARE my_cursor CURSOR FOR select id,num from A;
  19. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  20.  
  21. open my_cursor;
  22. xxoo: LOOP
  23. fetch my_cursor into row_id,row_num;
  24. if done then
  25. leave xxoo;
  26. END IF;
  27. set temp = row_id+row_num;
  28. insert into B(number) values(temp);
  29. end loop xxoo;
  30. close my_cursor;
  31. end //
  32. delimter;
  33.  
  34. 执行:
  35. call p6()
  36. '''
  1. # 动态执行SQL(防SQL注入)
  2. '''伪代码
  3. delimiter //
  4. create procedure p7(
  5. in tp1 varchar(225),
  6. in arg int
  7. )
  8. begin
  9. 1.预检测某个东西 sql语句的合法性
  10. 2.格式化tpl + arg
  11. 3.执行SQL语句
  12. set @xo =arg
  13. PREPARE xxx FROM 'select * from student where sid > ?';
  14. EXECUTE xxx USING @xo;
  15. DEALLOCATE prepare prod;
  16. end //
  17. delimter;
  18. call p7("select * from tb where id >?",9)
  19. '''
  20. '''真实代码
  21. delimiter \\
  22. CREATE PROCEDURE p8 (
  23. in nid int
  24. )
  25. BEGIN
  26. set @nid = nid;
  27. PREPARE prod FROM 'select * from student where sid > ?';
  28. EXECUTE prod USING @nid;
  29. DEALLOCATE prepare prod;
  30. END\\
  31. delimiter ;
  32.  
  33. '''
  1.  

Python9-MySQL-MySQL存储过程-视图-触发器-函数-day45的更多相关文章

  1. MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称

    MySQL 查询 存储过程 视图 触发器 函数 索引 建表语句 数据库版本 当前登录用户 当前数据库名称   INFORMATION_SCHEMA.TABLES INFORMATION_SCHEMA. ...

  2. mysql 查询表,视图,触发器,函数,存储过程

    1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TAB ...

  3. MySQL笔记 存储过程 游标 触发器

    第二十三章 使用存储过程 MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就 ...

  4. python 全栈开发,Day64(视图,触发器,函数,存储过程,事务)

    昨日内容回顾 pymysql:属于python的一个模块 pip3 install pymysql conn = pymysql.connect(...,charset = 'uft8') 创建游标 ...

  5. MySql的存储过程和触发器

    Mysql的存储过程是类似于其它编程语言中的函数的功能,存储过程内部可以使用顺序循环和转移三种基本程序结构,而且整个存储过程可以接受和返回参数. 创建存储过程(procedure)时,因为其内部有以; ...

  6. Mysql之存储过程与存储函数

    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语 ...

  7. mysql 视图/触发器/函数

    一.视图 作用:简写代码,与临时表的作用差不多 .创建 create view 视图名 as SQL语句 .修改 alter view 视图名 as 新SQL语句 .删除 drop view 视图名 ...

  8. Database学习 - mysql 视图/触发器/函数

  9. 7.MySQL优化---存储过程和存储函数

    转自互联网. 当一个大型系统在建立时,会发现,很多的SQL操作是有重叠的,个别计算是相同的,比如:业务系统中,计算一张工单的计算方式.当遇到这些情况时,我们运用存储过程就是一个非常棒的优化啦.那么,什 ...

随机推荐

  1. [原创]Nodejs 远程执行linux shell

    分享几个基于nodejs远程执行linux shell的函数 参数说明: ips - 一个存有IP地址的数组对象 /** * Created by kevalin on 2015/4/27. */ v ...

  2. 深入理解C#中的IDisposable接口(转)

    转自:https://www.cnblogs.com/wyt007/p/9304564.html 写在前面 在开始之前,我们需要明确什么是C#(或者说.NET)中的资源,打码的时候我们经常说释放资源, ...

  3. PHPCMS的自增长标签

    设置幻灯片的时候,需要用到自增长ID. <div class="tt_pic"><img src="images/1.gif" />&l ...

  4. Comparing Two High-Performance I/O Design Patterns--reference

    by Alexander Libman with Vladimir GilbourdNovember 25, 2005 Summary This article investigates and co ...

  5. mysql存储方式MyISAM 和 InnoDB的区别

    MyISAM 和 InnoDB 讲解: InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级 ...

  6. asp.net 子域跨域 带cookie

    先来一个老外的解决方案: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ...

  7. spring batch 以游标的方式 数据库读取数据 然后写入目标数据库

    前面关于Spring Batch的文章,讲述了SpringBatch对Flat.XML等文件的读写操作,本文将和大家一起讨论Spring Batch对DB的读写操作.Spring Batch对DB数据 ...

  8. 2833 奇怪的梦境 未AC

    2833 奇怪的梦境 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold         题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小 ...

  9. SQL解读XML案例

    ALTER PROCEDURE [dbo].[GetProductList1] @Products XML AS BEGIN SET NOCOUNT ON DECLARE @Pointer INT D ...

  10. jeesit 部署404

    1.刷新项目 2.clean 项目 3.重新部署项目 4.Ran as maven build 后在重新部署 5.重新导入maven项目