zoukankan      html  css  js  c++  java
  • MySQL视图、事务与存储过程

    一、可视化工具的使用方法

    简述:首先我们使用数据库可视化工具是为了让我们在建立数据库的时候能够减少代码的书写从而提升我们编写程序的效率,而我使用的是Navicat工具是因为使用它基本为无脑操作我就不过多的介绍。

    二、注入mysql攻击

    1、什么是注入mysql攻击?

    简述:注入mysql攻击指的是用户可以某种方式无需用户名或密码就可以登入你的数据库。

    2、注入mysql攻击的两种方式:

      1:用户在登录时在其输入的用户名后写入了如__等字符,在pymysql中__代表的是注释所以跟在其后的输入密码的功能就无效了,这样可以通过在输入界面写上限制条件就可以避免

      2、中间人攻击,是由黑客通过编写一个假的用户端来给服务端发消息从而上面那种解决方式就不行了,所以必须通过给服务端也加上限制条件就能够避免,当然pymysql也帮我们想到了这一点我们可以将要执行的数据放在其execute括号里的args里就可以就解决以上问题。

    三、视图

    1、什么是视图?

    简述:视图指的就是将一个表的得到的结果当作条件给另一个表使用。

    2、使用视图有什么好处呢?

    简述:使用视图能够限制用户的查且这种方式比直接限制其权限好在视图查询符合某一条件的一行数据而限制权限并不能起到这种作用。

    2.1怎么使用视图其步骤如下:

      create view 视图名 as select* from表名(所需数据的表);

    特点:1、视图是永久存储而且存储的并不是数据而是一条as sql 语句.

       2、视图被修改或删除时其所引用的原表也会跟着变

       3、视图的每一次执行其实都是在调 as 后的sql语句

    四、事务

    1、什么是事务?

    简述:在生活中事务可以理解为做某一事可以分为一个一个步骤从而完成事情的方法,而在mysql中其就是由一组SQL语句组成。

    2、事务的四大特性

    原子性:

      事务是一个整体不可分割

    隔离性:

      事务之间隔离是为了数据的完整性,由并发执行引发的问题有:

     1.脏读    一个事务 读到了 另一个事务未提交的数据  查询 之前要保证 所                                有的更新都已经完成
        2.幻读    一个查询事务没有结束时 数据被另一个事务 执行insert delete
        3.不可重复读   一个事物在查询 另一个事务在 update

    四种隔离级别:

    读未提交:

    读已提交:

    可重复读:

    串行化:

    一致性:

      当事务执行后所有的数据都是完整的

    持久性:

        一旦事务提交就会被永久存储

    注意:事务就是一组SQL语句组成的,它们的原子性要变就一起变,不变就都不变。

    mysql是默认执行事务的而pymysql需要我们手动写commit提交事务,在提交前我们可以通过start  transaction启动事务,当执行事务出错是可以通过 rollback回滚事务(从而使时务能够恢复原来的状态).

    五、存储过程

    1、什么是存储过程?

    简述:存储过程可以理解为mysql的编程语言.

    2、存储过程的三种类型

      对于同样一个业务  你可以放到python也可以放到mysql 有什么区别?

           1. 应用程序  处理逻辑           

        需要手动编写 sql语句

                优点:执行效率高            

                缺点: 开发效率低

      mysql

           2.           应用程序

              mysql 处理逻辑

                特点: 应用程序开发者不需要需要手动编写 sql语句

                      mysql开发者来编写

                优点: 应用程序开发效率高

                缺点: 执行效率略低,沟通成本增高

            3.使用 ORM(object relation map) 对象关系映射

                自动帮你生成对应的sql语句 比如你要注册用户 本来要写insert 语句  现在使用orm调用save(用户对象)

                优点:开发效率高            

        缺点:执行效率降低

            存储过程相当于python中的一个函数

            简单地说 学习存储过程就是学习 如何使用mysql编写一个函数

            语法:

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

                begin

                    具体的sql代码

                end            

    参数前面需要指定参数的作用

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

        out 用于返回数据            

                inout 即可传入 也可返回

                参数类型是 mysql中的数据类型

             案例:创建一个存储过程 作用是将两个整数相加

                create procedure add_p (in a int,in b int)

                begin

                    select a + b;

                end

                //    调用 call add_p(1,2)

             案例:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中

         定义一个变量      set @su = 100;

                create procedure add_p2 (in a int,in b int,out su int)

                begin

                    set su = a + b;

                end

                //  

     定义变量 set @su = 100;

     调用过程 call  add_p2(10,20,@su);

              注意  在存储过程中 需要使用分号来结束一行 但是分号有特殊含义,得将原始的结束符 修改为其他符号,delimiter // 结束符更换为//            

              mysql中的if语句结构

              if 条件 then

                代码

              elseif 条件 then

                代码

              else then

                代码

              end if;

         end

               \

      案例:          使用存储过程 完成  输入 一个 数字 1或2   显示 壹 或 贰

                create procedure show_p (in a int)

                begin

                if a = 1 then

                    select "壹";

                elseif a = 2 then

                    select "贰";

                else

                    select "other";

                end if;

                end //  

       调用存储过程 使用 call 过程名称  call add_p(10,20);

            其他的流程控制

            switch

            case

            while

            repeat ==  do while

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

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

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

  • 相关阅读:
    二分查找(通过相对位置判断区间位置)--17--二分--LeetCode33搜索旋转排序数组
    归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对
    22-Java-Hibernate框架(二)
    21-Java-Hibernate框架(一)
    操作系统-5-进程管理(二)
    操作系统-4-进程管理(一)
    操作系统-3-操作系统引论
    操作系统-2-存储管理之LRU页面置换算法(LeetCode146)
    20-Java-正则表达式
    19-Java-核心类库2-包装类、Integer类、String类、StringBuffer类、StringBuilder类
  • 原文地址:https://www.cnblogs.com/ageliu/p/9670979.html
Copyright © 2011-2022 走看看