06 数据库入门学习-视图、sql注入、事务、存储过程

一、视图

1.什么是视图

  视图本质是一张虚拟的表

2.为什么要用

  为了原表的安全
  只要有两大功能
    1.隐藏部分数据,开放指定数据
    2.视图可以将查询结果保存,减少sql语句的次数
  特点:
  1.视图使用永久保存的,而且保存的仅仅是一条 as sql语句
  2.每次对视图的查询,都是再次执行了保存的sql语句
  3.对于视图的任何修改都会同步到原表

3.如何使用

  语法:

create view 视图名 as select * from 原表名;

  验证:对视图的任何修改会改变原表

 验证

二、sql注入

1.什么是sql注入攻击

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

2.如何使用sql注入

案例一

 

案例二

 

3.如何预防sql注入漏洞

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

 

三、事务

1.什么是事务

  是一组sql语句集合
  事务的特性:
    1.原子性:
      事务是一个整体,要么都执行完毕,要么一个都没执行
    2.隔离性:
      多个事务之间一定是并发的,那么并发一定会出现问题
      1.脏读 读取到另一个事务未提交的数据
      2.不可重复读 两次对同一记录的查询结果不一致
        一个事务在查询 另一个事务在更新
      3.幻读 对同一表中的查询结果数量不一致
        一个事务在查询 另一个事务在添加或删除
    3.一致性:
      在这个事物执行完成后,事务中所进行的修改也都完成了,这样一来就保证了数据的完整性
    4.持久性
      当事务执行完毕后,事务对数据的修改都是持久性的、不可恢复的

2.如何使用

#语法
#1.开启一个事务
start transaction

#2.sql语句
........
#3.事务执行完毕后 使用commit来提交 一旦提交就不可恢复了
commit

#4.在事务还未提交时我们可以使用rollback来回滚 默认回滚到事务开始前的状态
rollback

四、存储过程

1.什么是存储过程

你可以理解为mysql的编程语言

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

既然如此,你不能把所有与数据存储相关的业务逻辑全都放mysql中?
能,但是对于公司而言,需要再请一个mysql开发者
对于你个人来说,提高沟通成本

2.三种开发的模型

方案一

应用程序: 处理逻辑,需要手动编写 sql语句

mysql:

优点:执行效率高
缺点: 开发效率低

方案二

应用程序:

mysql :处理逻辑,mysql开发者来编写,应用程序开发者不需要需要手动编写 sql语句

优点: 应用程序开发效率高
缺点: 执行效率略低,沟通成本增高

方案三

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

3.语法

delimiter //#更换mysql的换行符
create procedure 过程的名称 ({in,out,inout}  参数名称  数据类型)
begin
    #具体的sql代码
end//
delimiter ;
#参数前面需要指定参数的作用
#in 表示该参数用于传入数据
#out 用于返回数据
#inout 即可传入 也可返回

4.流程控制

if语句

if 条件  then
    语句1;
elseif 条件 then
    语句2;
else
    语句3;
end if;

case语句

你给我一个值 我对它进行选择 然后执行匹配上的语句

case 变量名
when 值1 then
    语句1;
when 值2 then
    语句2;
when 值3 then
    语句3;
else
    语句4;
end case;

while语句

WHILE 条件 DO
    语句.....
end WHILE;

原文地址:https://www.cnblogs.com/ouyang99-/p/10354774.html

时间: 2024-12-29 15:36:00

06 数据库入门学习-视图、sql注入、事务、存储过程的相关文章

Java学习总结(十八)——MySQL数据库(4)MySQL数据库中的视图,函数,存储过程中常见循环

一.MySQL存储过程中常见的循环1.while循环:WHILE.....DO.....END WHILE例1:创建存储过程(求1+2+.......+num的和):创建成功,进行调用:显示结果:2.REPEAT循环: REPEAT.........UNTLL END REPEAT例2:创建存储过程:创建完成,调用存储过程:显示结果:3.LOOP循环:LOOP END LOOP 例3:创建存储过程:创建成功,调用存储过程:显示结果:二.MySQL中的视图1.概念:有结构(有行有列),但没有结果(

【数据库】软件安全测试之SQL注入

这些年我们发现越来越多的公司开始注重安全测试了,为什么?因为安全测试可以在某种程度上可以排查掉你项目的一些安全漏洞,这样你的系统上线后才会相对安全,才有可能尽量避免来自外部的攻击.每一年互联网都会发生一些重大的安全事件,而且每一次带来的后果也是很严重的,而这些教训恰恰都说明了安全测试的重要性. 那什么是安全测试呢?百度百科上给出来的解释是:安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 .按照小编的理解,简单点

2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践

第1节 研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 1.1 原理 在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了.向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上,这就是缓冲区和缓冲区溢出的道理. 参见这篇博客缓冲区溢出攻击 1.2 oracle数据库 针对Oracle数据库缓冲区溢出攻击的研究 1.3 mysql数据库

零基础学习手工SQL注入

SQL注入介绍 SQL注入,其实就是用户浏览器提交的变量内容,应用程序(代码可能是asp.aspx.php.jsp等)对浏览器提交过来的数据未过滤,直接去数据库查询,导致把数据库里面其他内容(如管理账户和密码)查询返回到页面上.先看个<墨者学院故事会>的一个小故事: 某个镇子里,银行保险柜做为一个公共区域帮居民存储贵重物品,为了防止错拿.多拿他人物品,银行规定:限制每人每次只能带一把开自己保险柜的钥匙,取自己的东西出入.在银行安检门口有个负责检查的安检员,安检员职责就是检查进入银行保险柜取物品

数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据. 2.视图特点 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系 视图是由基本表(实表)产生的表(虚表) 视图的建立和删除不影响基本表 对视图内容的更新(添加.删除和修改)直接影响基本表 当视图来自多个基本表时,不允许添加,修改和删除数据 3.视图的本质 视图是根据SQL语句获取动态的数据集,并为其命

Oracle数据库入门——物化视图日志结构

物化视图的快速刷新要求基本必须建立物化视图日志,这篇文章简单描述一下物化视图日志中各个字段的含义和用途. 物化视图日志的名称为MLOG$_后面跟基表的名称,如果表名的长度超过20位,则只取前20位,当截短后出现名称重复时,Oracle会自动在物化视图日志名称后面加上数字作为序号. 物化视图日志在建立时有多种选项:可以指定为ROWID.PRIMARY KEY和OBJECT ID几种类型,同时还可以指定SEQUENCE或明确指定列名.上面这些情况产生的物化视图日志的结构都不相同. 任何物化视图都会包

02 数据库入门学习-数据类型

一.数据存储引擎 1.什么是引擎 ? 引擎是一个功能的核心部分,现实中的引擎可以被分类.从动力来源来说,引擎可以分为汽油. 柴油.电动.混合动力等,需求场景的不同催生了不同的引擎类别. 在数据库中同样也是有引擎的.核心功能是存储数据 涉及到存储数据的代码 就称之为存储引擎 根据不同的需求,也有着不同的引擎分类. 创建表时在最后指定引擎名称 engine = xxx create table t1(id int)engine=innodb create table t2(id int not nu

05 数据库入门学习-正则表达式、用户管理、pymysql模块

一.正则表达式 正则表达式用于模糊查询,模糊查询已经讲过了 like 仅支持 % 和 _ 远没有正则表达式灵活当然绝大多数情况下 like足够使用 #语法 select *from table where name regexp "正则表达式"; #实例 #准备数据 create table emp (id int,name char(10),sex char,age int,dept_id int,job char(10),salary double); insert into em

Oracle数据库学习 视图、序列及存储过程

视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查询语句,当基表数据发声变化,视图数据也随之变化. 视图创建后,可以像操作表一样操作视图,主要是查询. 根据视图所对应的子查询种类分为几种类型: select语句是基于单表建立,并且不包含任何函数运算.表达式或者分组函数,叫做简单视图,此时视图是基表的子集. select语句是基于单表建立,但是包含了