博客
关于我
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
阅读量:794 次
发布时间:2023-02-10

本文共 1950 字,大约阅读时间需要 6 分钟。

视图与事务、存储过程的技术详解

一、视图概述

视图是一种在数据库中通过查询生成的虚拟表,其数据并非直接存储在硬盘中,而是通过查询在内存中拼接而成。这种虚拟表可以被多次使用,无需重复执行原查询语句。

1. 视图的作用

  • 重复查询优化:频繁使用虚拟表时,可以避免每次都执行原始查询。
  • 数据一致性:修改视图会同步更新原表,确保数据一致性。

2. 视图的创建与删除

  • 创建语句
    create view teacher_course as select * from teacher inner join course on teacher.id=course.id;
    create view test_view as select * from t1;
  • 删除语句
    drop view teacher_course;

3. 视图的特点

  • 查询执行时,实际运行的是as后面的查询语句。
  • 可对视图进行修改,修改会反映到原表。
  • 视图存储的是SQL语句,而非数据。
  • 二、事务与数据一致性

    事务是一组SQL语句的集合,具备以下特性:

  • 原子性:所有操作要么全部成功,要么全部失败。
  • 隔离性:防止并发操作导致的数据不一致。
    • 脏读:未提交的数据被读取。
    • 幻读:未提交的数据被插入或删除。
    • 不可重复读:在查询时,另一事务已修改数据。
  • 一致性:事务完成后,数据完整性得到保证。
  • 持久性:提交后数据永久存储。
  • 1. 事务的执行

    • 开启事务
      begin transaction;
    • 提交事务
      commit;
    • 回滚事务
      rollback;

    2. 事务中的保存点

    • 创建保存点
      savepoint point_name;
    • 回滚至保存点
      rollback to point_name;

    三、存储过程详解

    存储过程是一组SQL语句的集合,可在数据库中独立存储和调用。

    1. 存储过程的创建

    • 示例:创建一个简单存储过程
      create procedure add_pro(in a int, in b int, out c int)begin  set c = a + b;end;
    • 注意事项
      • 存储过程的语句以分号结束。
      • 使用delimiter更改结束符。

    2. 存储过程的调用

    • 直接调用
      call add_pro(2, 4, @result);
    • 查看返回值
      select @_p1_2;

    3. 存储过程的流控制

    • 条件语句
      if type = 1 then  set result = "type = 1";elseif type = 2 then  set result = "type = 2";else  set result = "type = other";end if;
    • 循环语句
      declare i int default 0;while i < 10 do  select "hello mysql";  set i = i + 1;end while;

    四、MySQL事务操作示例

    1. 账户转账案例

    start transaction;update user set balance=900 where id=1;  # 支付100元update user set balance=1010 where id=2;  # 中介拿走10元update user set balance=1090 where id=3;  # 卖家收到90元commit;

    2. 事务处理异常

    try:  update user set balance=900 where id=1;  update user set balance=1010 where id=2;  update user set balance=1090 where id=3;except Exception:  rollback;else:  commit;

    五、存储过程的使用场景

    1. 注册新用户的场景

    • 客户端请求:发送账户名查询是否存在。
    • 服务器处理:调用存储过程验证账户名,返回结果。
    • 客户端处理:根据结果决定下一步操作。

    2. 存储过程的优缺点

    • 优点:减少客户端与服务器的通信次数。
    • 缺点:不通用,难以迁移。

    六、MySQL开发模型

    1. 应用处理逻辑

    • 优点:扩展性高。
    • 缺点:执行效率较低,SQL优化复杂。

    2. ORM框架

    • 优点:开发效率高,扩展性好。
    • 缺点:执行效率不如原生SQL。

    3. 存储过程+ORM

    • 优点:结合两者优势,提升开发效率。

    七、总结

    视图和事务是数据库开发中的核心概念,存储过程则为业务逻辑的高效处理提供了重要工具。在实际应用中,选择合适的开发模型和事务隔离级别,结合存储过程和ORM框架,能够提升开发效率和系统性能。

    转载地址:http://vkbfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>
    MySQL中地理位置数据扩展geometry的使用心得
    查看>>
    Mysql中存储引擎简介、修改、查询、选择
    查看>>
    Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
    查看>>
    mysql中实现rownum,对结果进行排序
    查看>>
    mysql中对于数据库的基本操作
    查看>>
    Mysql中常用函数的使用示例
    查看>>
    MySql中怎样使用case-when实现判断查询结果返回
    查看>>
    Mysql中怎样使用update更新某列的数据减去指定值
    查看>>
    Mysql中怎样设置指定ip远程访问连接
    查看>>
    mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
    查看>>
    Mysql中文乱码问题完美解决方案
    查看>>
    mysql中的 +号 和 CONCAT(str1,str2,...)
    查看>>
    Mysql中的 IFNULL 函数的详解
    查看>>