视图:
本质是一张虚拟的表
数据来自select语句
用途是保障原表安全

功能1:隐藏部分数据,开放指定数据
功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能

例如:
select * from emp where dep_id=(select id from where name='市场');
要查询市场的人,可以将查询市场id的结果作为一个视图,以后再使用这个结果就可以直接查看视图

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

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

sql注入问题:

sql="select * from user where name='%s' and pwd ='%s';"%(input('请输入用户名'),input('请输入密码'))

当用户输入的用户名为yy' -- 时,密码被注释掉了,--代表注释的意思
如果使用xxx' or 1=1 这个时候用户名和密码都被忽略掉了

python 避免sql注入:

res=cursor.execute("select *from emp where name=%s and pwd=%s;",args(input('请输入用户名'),input('请输入密码')))

事物:
在mysql中事物是一组sql语句的集合

事物的特性:1.原子性,即事物是一个整体,不可再分割
2.隔离性:事物之间需要相互隔离,维护数据的完整性

事物有4中隔离级别:
读未提交
读已提交
可重复读 默认
串行化

事物就是一堆sql语句的集合,他们是原子性的,要么全部执行,要么全部都不执行

mysql这个客户端默认开启了自动提交,一条sql语句就是一个单独的事物

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

start transaction:开启一个事物
commit:提交事物
rollback:回滚

存储过程:
1 存储过程
存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql

02 三种开发模型
1、
应用程序:只需要开发应用程序的逻辑
mysql:编写好存储过程,以供应用程序调用

优点:开发效率,执行效率都高
缺点:考虑到人为因素、跨部门沟通等问题,会导致扩展性差

2、
应用程序:除了开发应用程序的逻辑,还需要编写原生sql
mysql:

优点:比方式1,扩展性高(非技术性的)
缺点:
1、开发效率,执行效率都不如方式1
2、编写原生sql太过于复杂,而且需要考虑到sql语句的优化问题

3、
应用程序:开发应用程序的逻辑,不需要编写原生sql,基于别人编写好的框架来处理数据,ORM
mysql:

优点:不用再编写纯生sql,这意味着开发效率比方式2高,同时兼容方式2扩展性高的好处
缺点:执行效率连方式2都比不过

03 创建存储过程

delimiter $$
create procedure p1(
in m int,
in n int,
out res int
)
begin
select tname from teacher where tid > m and tid < n;
set res=0;
end $$
delimiter ;

# 如何用存储过程
#1、直接在mysql中调用
set @res=10
call p1(2,4,10);
#查看结果
select @res;

#2、在python程序中调用

#3、事务的使用
delimiter //
create PROCEDURE p5(
OUT p_return_code tinyint
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END;

DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END;

START TRANSACTION;
update user set balance=900 where id =1;
update user123 set balance=1010 where id = 2;
update user set balance=1090 where id =3;
COMMIT;

-- SUCCESS
set p_return_code = 0; #0代表执行成功

END //
delimiter ;

delimiter //
create PROCEDURE p6(
OUT p_return_code tinyint
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END;

DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END;

START TRANSACTION;
update user set balance=900 where id =1;
update user set balance=1010 where id = 2;
update user set balance=1090 where id =3;
COMMIT;

-- SUCCESS
set p_return_code = 0; #0代表执行成功

END //
delimiter ;

视图,sql注入问题,事物,存储过程的更多相关文章

  1. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  2. 预处理prepareStatement是怎么防止sql注入漏洞的?

    序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...

  3. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

  4. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  5. 注入攻击(SQL注入防御)

    正确的防御SQL注入 sql注入的防御不是简单只做一些用户输入的escape处理,这样是不够的,只是提高了攻击者的门槛而已,还是不够安全. 例如 mysql_real_escape_string()函 ...

  6. python-pymysql防止sql注入攻击介绍

    目录 pymysql sql 注入攻击 调用存储过程 pymysql pymysql 是一个第三方模块,帮我们封装了 建立表/用户认证/sql的执行/结果的获取 import pymysql # 步骤 ...

  7. sql注入问题-视图-事物-以及存储过程(可视化工具)

    可视化工具(了解) 可视化工具 workbench 视图 视图 是一张虚拟的表 语法: create view 视图表名 as select * from t1; 作用: .他是执行as 后面的sql ...

  8. MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制

    一.SQL注入攻击 1.什么是SQL注入攻击 一些了解sql语法的用户,可以输入一些关键字 或合法sql,来导致原始的sql逻辑发生变化,从而跳过登录验证 或者 删除数据库 import pymysq ...

  9. MySQL数据库(六) —— SQL注入攻击、视图、事物、存储过程、流程控制

    SQL注入攻击.视图.事物.存储过程.流程控制 一.SQL注入攻击 1.什么是SQL注入攻击 import pymysql conn = pymysql.Connect( user="roo ...

随机推荐

  1. andorid 练习微信登陆

    AndroidManifest.xml layout1.xml <?xml version="1.0" encoding="utf-8"?> < ...

  2. Mike and strings 798B

    B. Mike and strings time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. eclipse自动添加javadoc注释

    参考文档: https://jingyan.baidu.com/article/36d6ed1f70ea9c1bce488350.html https://www.cnblogs.com/yangji ...

  4. 开发中,android手机WIFI无法使用,无SIM卡故障解决

    用eclipse 开发android中,突然出现,android手机WIFI无法使用,无SIM卡故障解决 发现故障后,想办法刷机(没有成功),触点清洁都搞了. 最后恢复出厂设置居然解决了,留资料给同行 ...

  5. MySQL中的联结表

    使用联结能够实现用一条SELECT语句检索出存储在多个表中的数据.联结是一种机制,用来在一条SELECT语句中关联表,不是物理实体,其在实际的数据库表中并不存在,DBMS会根据需要建立联结,且会在查询 ...

  6. How to use external classes and PHP files in Laravel Controller?

    By: Povilas Korop Laravel is an MVC framework with its own folder structure, but sometimes we want t ...

  7. 编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展

    一.软件开发的现状 软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化. 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的. 随着这些新的技术以 ...

  8. Two Sum III - Data structure design LT170

    Design and implement a TwoSum class. It should support the following operations:add and find. add - ...

  9. Java页面中EL的${}与<%= request.getParameter%>有什么区别? el 取不到值

    ${requestScope}操作的是request的作用域,相当于request.getAttribute();不过EL比这个更智能些,它不用强制类型转换就可以拿到了真实对象的值.request.g ...

  10. On the internet, nobody known you are a dog !