mysql视图和存储过程哪个性能好_MySQL系列(6)

我是谁?暴鲤龙

312791ca412377ace81764517fca83da.png

66.事务的提交

事务有点像打包操作

开启事务:start transaction

事务:可以有很多个步骤,这些步骤要么全成功要么全失败

提交事务:commit

89875c230fd2b8ba298de6665ddd5b2b.png

67.事务的回滚

rollback,当遇到突发情况时,撤销执行的sql语句

事务中的语句执行后,在事务中查询会发现已经修改了,而实际数据库中并未修改。

rollback,撤回事务中执行的语句

b25cf6f34bdc32641ad233fa13878967.png

7b7d0a8b6448fd0eabcafd5eabf7d09a.png

a7004f19d7dd6e5ec7980341dc45b43d.png

e3046b37f012d4ca50ca60d0958f0a89.png

68.事务并发操作-脏读

多人同时操作数据库

脏读:看到了还没提交的事务,read committed读提交能解决脏读问题

隔离级别:默认是重复读repeatable read,还可以是read uncommitted(一个事务可以读取另一个未提交事务的数据),read committed(一个事务要等另一个事务提交后才能读取数据),serializable

rollback和commit都可以结束事务。

69.事务的隔离级别

read uncommitted(一个事务可以读取另一个未提交事务的数据),会产生脏读、不可重复读、幻读

read committed(一个事务要等另一个事务提交后才能读取数据),不会产生脏读,会产生不可重复读、幻读

repeatable read(重复读,默认),不会产生脏读、不可重复读,会产生幻读

serializable,不会产生脏读、不可重复读、幻读

不可重复读:一个事务范围内两个相同的查询却返回了不同的数据,解决方法:repeatable read(重复读)

幻读:解决方法,serializable,但这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

70.添加用户

权限操作

权限:限制一个用户能够做什么事情,mysql中可设置全局权限,指定数据库权限,指定表权限,指定字段权限。

权限包括:create,drop,alter,delete,index,insert,select,update,create view,execute,可以限制用户。

创建用户:create user “用户名”@“localhost” identified by “1234”;也可以navicat图形化创建

删除用户:drop user 用户名”@“localhost”;也可以navicat图形化右键删除,

71.分配权限

分配权限:给所有权限

180145067aa4b03bb8816ef358e7e946.png

加上flush privileges,刷新一下。

也可以创建对指定数据库的所有权限:语句略

还可以只对某个表的权限:语句略

查看权限:show grants

删除权限:revoke 权限 on 数据库对象 用户

72.视图简介

视图:虚拟的表,内容由查询定义

视图特性:对若干表的应用,一张虚拟表,可以和基表一样进行增删改查

视图作用:安全性、查询性能提高,提高了数据的独立性。

73.视图创建、修改、删除

视图创建,创建后的结果就在view视图中,创建后就可以从视图中进行查询了。

ae824e56b03a649f01d6a36daed70eeb.png

修改视图:视图发生了改变

ce3db6e5fc8996eb2977e087a2983ab0.png

删除视图:

cb22b13e683bac81280a3365de3169d4.png

74.视图查询机制

视图机制:替代式(操作视图时,视图名直接被视图定义给替换掉,相当于是字句,替换成了sql语句),具化式(先查询后放在内存中,再从内存这个表中提取数据)

视图中的各种参数

algorithm参数:merge(处理方式替代式,可以进行更新真实表中的数据,修改了视图中的数据,真实表中的数据也会被修改),temptable(具化式,数据存储在临时表中,不可以进行更新操作),undefined(没有定义algorithm参数),mysql更倾向于选择替代方式,因为更加高效。

with check option:更新数据时,不能插入或更新不符合视图限制条件的记录。

local和cascaded:为可选参数,决定了检查测试的范围,默认值为cascaded

75.视图不可更新部分

不可改部分:只要视图中的数据不是来自基表的,就不能直接修改。包括聚合函数,distinct关键字,gruop by字句,having字句,union运算符,from字句中包含多个表,select语句中引用了不可更新视图。

76.存储过程简介

存储过程:可编程的函数,是为了完成特定功能的sql语句集;具有名字的一段代码,能完成特定功能。

好处:可以将重复性很高的一些操作进行封装,简化对sql的调用;批量处理;统一接口,确保数据安全性;

77.delimiter

delimiter:把标准分隔符改成需要符号如$$

76056999af778ac690693d318838c496.png

为了把存储过程作为整体,所以有时需要把标准分隔符进行修改。

78.存储过程创建,查看,删除

存储过程创建后会被长久保存

9291bf0d3b555cf27443473950ea030a.png

调用存储过程:call 名称()

查看存储过程:

1eeef3e0b538d89a37b1bbe505ed87e0.png

查看存储源码

efd08d5d80c95a0d18600c614f202fc8.png

删除存储过程:

38bc7472635e90e30675f20e407d1ed6.png