视图+sql注入+事务+存储过程

视图本质上是一张虚拟的表,数据来自select语句

使用视图可以保证原表的安全:
功能1,影藏部分数据 开放指定的数据
功能2,因为视图可以将查询结果保存特性 我可以用视图 来达到减少书写sql的次数

视图的使用,创建视图:
create view test_view as select *from t1;

特点:
1.每次对视图进行的查询 其实都是再次执行了 as 后面的查询语句
2.可以对视图进行修改 修改会同步到原表
3.视图是永久存储的 存储的不是数据 而就是一条 as sql语句

基本不用 因为程序开放的数据,不是开放sql语句,而开放的是查询结果



sql注入攻击:
黑客可以输入一些关键字 或合法sql 来导致原始的sql逻辑发生变化 从而跳过登录验证 或者 删除数据库

避免的方式
在接受用户输入的数据时 可以加上限制 比如 不能输 -- ' ; where 等等
上面这种方式 只能避免 黑客 从你的客户端软件注入 sql
但是无法避免 中间人攻击(在你的客户端和服务器中间加一个中转服务器)
这样就绕过了客户端的输入限制 此时 只能将 sql合法性验证放在服务器端

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



事务其实就是一组sql语句集合
事务的特性
1.原子性
事务是一个整体 不可分割
2.隔离性
事务之间要相互隔离 为了维护数据完整性

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

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

3.一致性
当事务执行后 所有的数据都是完整的(外键约束 非空约束)
4.持久性
一旦事务提交 数据就永久保存

强调: 事务就是一堆sql语句的集合 它们是原子性的 要么全部执行 要么都不执行
mysql这个客户端 默认 开启自动提交 一条sql语句就是一个单独的事务
pymysql 默认是不自动提交 需要手动commit 意思是默认就开启了事务

事务主要语句:
start transaction; 开启一个事物
commit 提交事物
rollback 回滚事务



存储过程可以理解为mysql的编程语言

存储过程的作用:
可以将程序的业务逻辑 放到mysql中来处理,这样可以降低网络访问次数 从而提高你的程序效率


三种开发的模型:
1. 应用程序 处理逻辑
应用程序开发者需要编写 sql语句
优点:执行效率高
缺点: 开发效率低

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

3.使用 ORM(object relation map) 对象关系映射
自动帮你生成对应的sql语句 比如你要注册用户 本来要写insert 语句 现在使用orm调用save(用户对象)
优点:开发效率高
缺点:执行效率降低


存储过程相当于python中的一个函数
简单地说 学习存储过程就是 学习如何使用mysql编写一个函数

语法:
create procedure 过程的名称 ({in,out,inout} 数据类型 参数名称)
begin
具体的sql代码
end
参数前面需要指定参数的作用
in 表示该参数用于传入数据
out 用于返回数据
inout 即可传入 也可返回

案例:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中
结束符更换为//
delimiter //
定义一个变量
set @su = 100;
创建函数
create procedure add_p2 (in a int,in b int,out su int)
begin
set su = a + b;
end
调用过程
call add_p2(10,20,@su);

调用存储过程 使用 call 过程名称

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



mysql中的if语句
if 条件 then
代码
elseif 条件 then
代码
else then
代码
end if;


其他的流程控制
switch
case
while
repeat == do while

总结: 实际上一个mysql中的类似函数的东西 我们可以用它实现一些逻辑处理
特点:里面可以包含流程控制语句 和 普通的sql语句
使用存储过程的优势
提高应用程序开发效率
降低网络访问次数
原文地址:https://www.cnblogs.com/liangchengyang/p/9669539.html