博客
关于我
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
阅读量:793 次
发布时间: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 外键约束
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>
    mysql 存在update不存在insert
    查看>>
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>