zoukankan      html  css  js  c++  java
  • MySQL第43天------视图、SQL注入问题、事务、存储过程

    一、视图

      定义:本质是一张虚拟的表,数据来自select语句

      用途:原表安全  1.隐藏部分数据,开放指定的数据  2.因为视图可以将查询的结果保存特性,所以可以用视图来减少书写sql语句的次数

      创建:create view test_view as select *from t1;

      特点:1.每次对视图进行的查询,其实都是再次执行了as后面的查询语句

         2.可以对视图进行修改,修改会同步到原表

         3.视图是永久储存的,存储的不是数据,而是一条as sql语句

    二、sql注入问题

    当用户输入的用户名为字符串 为 yy' -- 时
    最终产生的sql select *from user where user = 'yy' -- ' and pwd = '987657890';
    -- 用于mysql注释 意思是 后面的内容忽略掉
    从而导致 密码是否正确都能登录成功
    "select *from user where user = 'axxax' or 1=1;

    什么是sql注入攻击

    一些了解sql语法的 用户 可以输入一些关键字 或合法sql 来导致原始的sql逻辑发生变化 从而跳过登录验证 或者 删除数据库
    如何避免 在接受用户输入的数据时 可以加上限制 比如 不能输 -- ' ; where 等等
    上面这种方式 只能避免 黑客 从你的客户端软件注入 sql
    但是无法避免 中间人攻击(在你的客户端和服务器中间加一个中转服务器)
    这样就绕过了客户端的输入限制 此时 只能将 sql合法性验证放在服务器端

    总结:把你的sql(用户输入的)参数,放execute函数的arg参数中,让pymysql自动帮你屏蔽注入攻击

    三、事务

      定义:一组sql语句集合

      特性:1.原子性:事务是一个整体,不可分割

         2.隔离性:事务之间要相互隔离,为了维护数据完整性

              脏读:一个事务读到了另一个事务未提交的数据。查询之前要保证所有的更新都已经完成

              幻读:一个查询事务没有结束的时候,数据被另一个数据执行插入或查询

              不可重复读:一个事务在查询另一个事务的时候,另一个事务在修改

                四种隔离级别:读未提交、读已提交、可重复读(默认)、串行化

         3.一致性:当事务执行后,所有的数据都是完整的

         4.持久性:一旦事务提交,数据就永久保存

      强调:事务就是一堆sql语句的集合,要么全部执行,要么全部不执行

         mysql默认开启自动提交,一条sql语句就是一个单独的事务

         pymysql默认不是自动提交,需要手动commit,意思是手动开启了事务

      start transaction开启一个事务

      commit提交事务

      rollback回滚事务

    四、存储过程

      定义:mysql的编程语言

      用途:可以将你的程序业务逻辑放到mysql里来处理,可以降低网络访问次数,从而提高程序的效率

      开发模式:1.应用程序处理逻辑,需要手动编写sql语句  优点:执行效率高  缺点:开发效率低

           2.应用程序mysql处理逻辑,mysql开发者编写  优点:应用程序开发效率高  缺点:执行效率略低,沟通成本高

           3.使用ORM对象关系映射,自动生成对应的sql语句  优点:开发效率很高  缺点:执行效率低

      语法:create procedure 过程的名称 ({in,out,inout} 数据类型 参数名称)

         begin 具体的sql代码 end 参数前面需要指定参数的作用

         in 表示该参数用于传入数据

         out 用于返回数据

         inout 即可传入,也可返回

      总结:实际上一个mysql中的类似函数的东西,我们可以用它实现一些逻辑处理

         特点:里面可以包含流程控制语句和普通的sql语句

            使用存储过程的优势,提高应用程序的开发效率,降低网络访问次数

  • 相关阅读:
    jps命令
    Collection
    java.lang包中异常
    final关键字
    JVM运行时数据区域
    String详解
    哈希码
    Java虚拟机
    垃圾收集器与内存分配策略
    solr简介
  • 原文地址:https://www.cnblogs.com/zhouyi0316/p/9671287.html
Copyright © 2011-2022 走看看