一:视图

  1. 1 视图是什么?
    本质是一张虚拟的表,他的数据来自select语句
    创建视图
    create view test_view select *from t1;
  2.  
  3. 2 有什么用?
    原表安全
  4.  
  5. 案例:
    在一个公司中需要一张表保存所有人的薪资信息,这个表不是所有人都能看到,只有老板和财务可以,任何一个员工只能看到自己的信息,所以不能把整个表的信息开放给员工
  6.  
  7. 功能1:隐藏部分数据,开放指定的数据
    功能2:因为视图可以将查询结果保存特性,可以用视图来达到减少书写sql的次数
    案例:select *from emp where dept_id = (select id from dept where name = "市场");
    要查询市场的人
    将调查结果作为一个视图,以后再使用到这个需求,就直接查看视图
    对视图进行的查询
  8.  
  9. 3 如何使用?
    创建视图:create view test_view as select *from t1;
        特点:
    1、每次对视图进行查询,其实都是再次执行了as后面的查询语句
    2、可以对视图进行修改,修改会同步到原表
    3、视图是永久存储的,存储的不是数据,就是一条as sql语句
  10.  
  11. 基本不用,因为你的程序开放的数据不是开放sql的语句,而开放的是查询结果

二:sql注入问题

  1. sql注入攻击是什么意思?
    一些了解sql语法的用户,可以输入一些关键字或合法sql
    来导致原始的sql逻辑发生变化,从而跳过登录验证或者删除数据库
    如何避免在接受用户输入的数据发生变化,从而跳过登录验证或者删除数据库
    上面这种方式只能避免,黑客从你的客户端软件注入sql
    但是无法避免中间人攻击(在客户端和服务器中间加一个中转服务器)
    这样就绕过了客户端的输入限制,此时只能将sql合法性验证放在服务器端
  2.  
  3. 总结:Python如何避免sql注入?
    把自己的sql(用户输入的)参数放execute函数的arg参数中,让pymysql自动帮你屏蔽注入攻击
  4.  
  5. #自己的理解
    客户端发给数据库服务器经过路由器, 然后被中间人截获客户端发的个人信息, 比如说,本来客户端的密码是123 然后被中间人截获后将密码改成321再发送给服务端,
    笼统的讲,就是你有一个快递, 本来是拿了快递后直接打包发给你, 但是这时候出现一个中间人,他拿了你的快递, 发现是个好东西,然后自己拿走,再放个别的东西寄给你,
  1.  

三:事务

  1. 生活中的事务,你可以理解为事情,一件事情要完成通常不可能一步到位,需要拆分多个小步骤
    举例 请你帮我买水
    1、给你钱
    2、你去买水
    3、你给钱
    4、拿水找钱
    5、把水给我
  2.  
  3. mysql中,事务是什么?
    是一组sql语句集合
    事务的特性
    1、原子性
    事务是一个整体,不可分割
  4.  
  5. 2、隔离性
    事务之间要相互隔离,避免导致数据错乱,为了维护数据完整性:
    举例:
    你有一张银行卡,第一次查看余额发现有1000元就开开心心买东西去了,买完东西回来付钱,再一查发现余额不足 ,原来你在第一次查询后,你的媳妇把钱转走了
  6.  
  7. 这个问题称为不可重复读,如何避免?
    当我在查的时候你不能修改,查询和修改不能同时进行
  8.  
  9. 因为并发访问,导致的一些问题
    1、脏读 一个事务读到了另一个事务未提交的数据,查询之前要保证所有的更新都已经完成
    2、幻读 一个查询事务没有结束时,数据被另一个事务执行insert delete
    3、不可重复读 一个事物在查询另一个事务在update
  10.  
  11. 四种隔离级别
    读未提交
    读已提交
    可重复读 默认
    串行化
  12.  
  13. 3、一致性
    当事务执行后 所有的数据都是完整的(外键约束 非空约束)
  14.  
  15. 4、持久性
    一旦事务提交 数据就永久保存
    强调:事务就是一堆sql语句的集合 他们是原子性的要么全部指向性 要么都不执行
  16.  
  17. mysql这个客户端 默认 开启自动提交,一条sql语句就是一个单独的事务
    pymysql 默认|是不自动提交,需要手动commit 意思是默认就开启了事务
  18.  
  19. 事务需要掌握的就是
    start transaction 开启一个事物
    commit 提交事物
    rollback 回滚事务

四:存储过程

  1. 存储过程是什么?
    你可以理解为mysql的编程
    为什么有了Python还要学习这种编程语言?
  2.  
  3. 作用:可以将你的程序业务逻辑放到mysql中来处理,这样可以降低网络访问次数,从而提高你的程序效率
  4.  
  5. 既然如此,能不能把所有与数据存储相关的业务逻辑全都放到mysql中?
    在技术面前:能
    但是对于公司而言,需要再请一个mysql开发者,对于你个人来说,提高沟通成本,比如说意见上的不统一
    三种开发的模型
    对于同一个业务,你可以放到Python也可以放到mysql,有什么区别?
    1、应用程序,处理逻辑
    需要手动编写sql语句
    优点:执行效率高
    缺点:开发效率低
    mysql
    2、应用程序
    mysql 处理逻辑
    特点:应用程序开发者不需要手动编写sql语句
    mysql开发者来编写
    优点:应用程序开发效率高
    缺点:执行效率偏低,沟通成本增加
  6.  
  7. 3、使用ORM(object relation map) 对象关系映射
    自动帮你生成对应的sql语句,比如说,你要注册用户,
    本来要写insert语句,现在使用orm调用save(用户对象)
    优点:开发效率高
    缺点:执行效率降低
  8.  
  9. 存储过程相当于Python中的一个函数,简单的说,学习存储过程就是学习如何使用mysql编写一个函数
  10.  
  11. 语法:
    create procdure 过程的名称({in,out,inout} 数据类型 参数名称)
    begin
    具体的sql代码
    end数据
    参数前面需要指定参数的作用
    in 表示该函数用于传入数据
    out 用于返回数据
    inout 可传入,也可返回
  12.  
  13. 参数类型是mysql中的数据类型
  1. 案例一:创建一个存储过程,作用是将两个整数相加
  2. create procedure add_p (in a int,in b int)
  3. begin
  4. select a + b;
  5. end
  6.  
  7. //

案例一:

  1. 调用 call add_p(1,2)
  1. 案例二:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中
  2. 定义一个变量
  3. set @su = ;
  4. create procedure add_p2 (in a int,in b int,out su int)
  5. begin
  6. set su = a + b;
  7. end
  8.  
  9. //

案例二:

  1. 定义变量 set @su = 100;
    调用过程 call add_p2(10,20,@su);
    注意:在存储过程中,需要使用分号来结束一行,但分号有特殊含义,得将原始的结束符,修改为其他符号
    delimiter // 结束符更换为 //
    delimiter;
  2.  
  3. mysql中的if语句
    if条件then
    代码
  4.  
  5. elseif 条件 then
    代码
  6.  
  7. else then
    代码
  8.  
  9. end if
  1.  
  1. 案例三:使用存储过程完成输入一个数字12,显示:壹
  2. create procedure show_p (in a int)
  3. begin
  4. if a = then
  5. select "壹";
  6.  
  7. elseif a = then
  8. select "贰";
  9.  
  10. else
  11. select "other";
  12. end if;
  13. end //

案例三:

  1. 调用存储过程,使用call过程名称
    call abb_p(10,20);
    其他的流程控制
    switch
    case
    while
    repeat == do while
  2.  
  3. 总结:实际上一个mysql中的类似函数的东西,我们可以用它实现一些逻辑处理
    特点:里面可以包含流程控制语句和普通的sql语句
  4.  
  5. 使用存储过程的优势
    提高应用程序开放效率
    降低网络访问次数
  1.  
  1.  

Python 43 视图 、sql注入问题 、事务 、存储过程的更多相关文章

  1. 视图,sql注入问题,事物,存储过程

    视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...

  2. Python中防止sql注入的方法详解

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...

  3. 06 数据库入门学习-视图、sql注入、事务、存储过程

    一.视图 1.什么是视图 视图本质是一张虚拟的表 2.为什么要用 为了原表的安全 只要有两大功能 1.隐藏部分数据,开放指定数据 2.视图可以将查询结果保存,减少sql语句的次数 特点: 1.视图使用 ...

  4. sql注入及事务

    Statement会有一个关于sql注入的bug ,所以基本不使用 一般使用PreparedStatement import java.sql.Connection;import java.sql.P ...

  5. python 打造一个sql注入脚本 (一)

    0x00前言: 昨天刚刚看完小迪老师的sql注入篇的第一章 所以有了新的笔记. 0x01笔记: sql注入原理: 网站数据传输中,接受变量传递的值未进行过滤,导致直接带入数据库查询执行的操作. sql ...

  6. python番外篇--sql注入

    一.sql注入概念介绍 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)S ...

  7. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  8. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  9. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

随机推荐

  1. 在把table表格中的数据导出到Excel的时候,以科学计数法显示位数多的数字时怎么解决?

    sbHtml.AppendFormat("<td> {0}</td>", data[i].IDcard.ToString()); sbHtml.Append ...

  2. PHP 之中文转为拼音

    /** * Created by PhpStorm. * User: Administrator * Date: 2019/1/2 0002 * Time: 下午 1:01 */ class PinY ...

  3. 关联API

    在类或者函数定义之前加上关联代码 API_XXX

  4. Ansible 利用playbook批量部署Nginx

    我这里直接部署的,环境已经搭建好,如果不知道的小伙伴可以看上一遍ansible搭建,都写好了,这里是根据前面环境部署的 192.168.30.21     ansible 192.168.30.25  ...

  5. 【转载】使用IntelliJ IDEA 配置Maven(入门)

    1. 下载Maven 官方地址:http://maven.apache.org/download.cgi 解压并新建一个本地仓库文件夹 2.配置本地仓库路径   3.配置maven环境变量      ...

  6. $(document).ready(function(){}) 与 window.onload = function(){} 区别

    $(document).ready(fucntion(){ //在页面dom结构加载完毕后执行代码, }) window.onload = function(){ //页面所有内容加载完毕后,执行代码 ...

  7. 生成元(Digit Generator, ACM/ICPC Seoul 2005, UVa1583)

    如果x加上x的各个数字之和得到y,就说x是y的生成元.给出n(1≤n≤100000),求最小 生成元.无解输出0.例如,n=216,121,2005时的解分别为198,0,1979. [分析] 本题看 ...

  8. char如何储存3个字节或者4个字节

    1.char字符存储的是Unicode编码的代码点,也就是存储的是U+FF00这样的数值,然而我们在调试或者输出到输出流的时候,是JVM或者开发工具按照代码点对应的编码字符输出的. 2. 所以虽然UT ...

  9. C++编写谷歌日历

    #include<iostream> #include<fstream> using namespace std; void main() //程序从这里开始运行 { int ...

  10. case....when ...多重判断

    CASE...WHEN 进行多重判断 CASE WHEN A  IS NOT NULL THEN B WHEN C IS NULL THEN CASE WHEN D IS NOT NULL THEN ...