数据库中的视图的使⽤与存储过程视图是什么?
本质是⼀张虚拟表,他的数据来⾃select语句。
作⽤:
功能1:隐藏部分数据,开放指定的数据
功能2:因为视图可以将查询的结果保存特性,我可以⽤视图来达到减少书写sql的次数
例如:select *from emp where dept_id=(select id from dept where name=”市场”);
要查询市场的⼈,将查询的结果作为⼀个试图,以后使⽤到这个需求就可以直接查看试图。
如何使⽤:
创建试图:
Create view test_view as select *from t1;
特点:
1. 每次对视图进⾏的查询,其实都是在次执⾏了as后⾯的⼩哈寻语句
2. 可以对视图进⾏修改,修改会同步到原表
3. 视图是永久保存的,存储的不是数据,⽽是⼀条as sql语句
基本不使⽤视图,因为你的程序开放的数据不是开放sql 语句,⽽开放的是查询结果
Sql注⼊问题
import  pymysql
conn = pymysql.Connect(
user="root",
password="admin",
host="localhost",
database="day43",
charset="utf8"
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
字体大小#sql = "select *from user where user = '%s' and pwd = '%s';" % (input("input userName"),input("input password"))
# 当⽤户输⼊的⽤户名为字符串为 yy' --  时
# 最终产⽣的sql  select *from user where user = 'yy' -- ' and pwd = '987657890';
# -- ⽤于mysql注释意思是后⾯的内容忽略掉
# 从⽽导致密码是否正确都能登录成功
# "select *from user where user = 'axxax' or 1=1;
#print(sql)
count = ute("select *from user where user = %s and pwd = %s;",args=(input("user"),input("pwd")))
print(count)
if count:
print("login success")
else:
print("login error")
cursor.close()
conn.close()
Sql注⼊攻击,是什么意思?
⼀些了解授权sql语法的⽤户可以输⼊⼀些关键字或合法的sql语句,来导致原始sql逻辑发⽣变化,从⽽跳过登陆验证或者删除数据库。
如何避免:在接受⽤户输⼊的数据时,可以加上限制,⽐如不能输⼊ --’;where等等
上⾯这种⽅式只能避免⿊客从你的客户端和服务器中间加⼀个中转服务器),这样就绕过了客户端的输⼊限制,此时只能将⽣⽓了sql合法性验证放在服务器端
总结:
Python如何避免sql注⼊?把你的sql(⽤户输⼊的)参数放在execute函数中,让pymysql⾃动帮你屏蔽注⼊攻击
存储过程:
java写一个小型数据库你可以理解为MySQL的编程语⾔。
作⽤:
可以将你的程序业务逻辑放到MySQL中来处理,这样可以降低⽹络的访问次数,从⽽提⾼你的程序效率。
我们可以将所有与数据存储相关的业务逻辑全都放在MySQL中,但这样意味着公司需要再请⼀个MySQL开发者,对你个⼈⽽⾔,提⾼了沟通成本。
三种开发模型:
对于同样的⼀个业务,你可以放到Python有⼈可以放到MySQL有什么区别?
1. 应⽤程序处理逻辑,需要动⼿编写sql语句
优点:执⾏效率⾼;缺点:开发效率低
1. MySQL处理逻辑
特点:应⽤程序开发者不需要⼿动编写sql语句,MySQL开发者来编写。
优点:应⽤程序开发效率⾼;缺点:执⾏效率低,沟通成本⾼
1. 使⽤OMB(object relation map)对象关系映射,⾃动帮你⽣成对应的sql语句,⽐如你要注册⽤户,本来要写insert语句,现在使⽤orm
安卓开发平台有哪些>compare主动被动用法
调⽤save(⽤户对象)
优点:开发效率⾼;缺点:执⾏效率低
存储过程相当于Python中的⼀个函数,简单的说,学习存储过程就是学习如何使⽤MySQL编写⼀个函数。
语法;
Create procedure 过程名称({in ,out,inout}数据类型参数名称)
Begin
具体的代码
End
参数前⾯需要指定参数的作⽤
In 表⽰该函数⽤于传⼊数据
Out ⽤于返回数据
Inout 即可传⼊也可返回
参数类型是MySQL中的数据类型
案例:创建⼀个存储过程作⽤是将两个整数相加
create procedure add_p (in a int,in b int)
begin
select a + b;
end
//
调⽤ call add_p(1,2)
案例:创建⼀个存储过程作⽤是将两个整数相加,将结果保存在变量中,先定义⼀个变量:set @su=100; Create procedure add_p(int a int,in b int,out su int)
Begin
Set su=a+b;
End
//
定义变量:set @su=100;
调⽤过程: call add_p2(10,20,@su);
注意:在存储过程中,需要使⽤分号来结束⼀⾏,但是分号有特殊意义,因此将原始的结束符修改为其他符号。Delimiter // 结束符更换为//
Delimiter;
mysql中的if语句
if 条件 then
代码
elseif 条件 then
代码
else then
代码
end if;
案例:
使⽤存储过程完成输⼊⼀个数字 1或2  显⽰壹或贰
create procedure show_p (in a int)
beginaltruism
if a = 1 then
select "壹";
elseif a = 2 then
select "贰";
else
select "other";
end if;
end //
调⽤存储过程使⽤ call 过程名称
call add_p(10,20);
其他的流程控制
switch
case
while
repeat ==  do while
总结: 实际上⼀个mysql中的类似函数的东西我们可以⽤它实现⼀些逻辑处理特点:⾥⾯可以包含流程控制语句和普通的sql语句
使⽤存储过程的优势
mysql查看所有存储过程提⾼应⽤程序开发效率
降低⽹络访问次数

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。