一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情。
MYSQL——访问控制、事务处理与并发控制(2)
需要:
了解组角色、角色、用户的概念及他们之间的区别;
了解数据库的不同权限;
掌握为用户分配权限及收回权限的方法;
掌握数据库事务管理的基本原理,包括显式事务、事务提交、事务回滚、隐式事务等,以及事务的编程方法。
掌握数据库并发控制的基本原理及其应用方法。
掌握Mysql数据库管理系统中为用户分配权限及收回权限的操作:
1、授予权限:grant
(1)把mystudent数据库所有表的所有操作权赋予用户user1
GRANT ALL PRIVILEGES ON mystudent.* TO user1;
操作完毕后以user1身份连接mysql,看数据变化。
(2)把所有数据库所有表的所有操作权赋予用户user1
GRANT ALL PRIVILEGES ON . TO user1;
注意user1需要重新登陆才能看到权限的变化。实际上权限已经生效,执行命令对应表的操作即可看到结果。
3、取消权限:revoke
权限回收:将权限从用户手中收回
(1)把mystudent数据库所有表的所有操作权从用户user1收回。
REVOKE ALL PRIVILEGES ON mystudent.* FROM user1;
(2)把所有数据库所有表的所有操作权从用户user1收回。
REVOKE ALL PRIVILEGES ON *.* FROM user1;
4、刷新权限:flush
刷新:将当前对用户的权限操作,进行刷新:将操作的具体内容同步到表中
基本语法:flush privileges;
并发操作带来的数据的不一致性问题,包括丢失修改、不可重复读和读“脏”数据:
1、事务隔离级别:
Read uncommitted:就是一个事务可以读取另一个未提交事务的数据
Read committed:一个事务要等另一个事务提交后才能读取数据
Repeatable read:就是在开始读取数据(事务开启)时,不再允许修改操作
Serializable:在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。
mysql默认的事务处理级别是'REPEATABLE-READ',而Oracle和SQL Server是READ_COMMITED
2、查看隔离级别
select @@global.tx_isolation,@@tx_isolation;
3、设置隔离级别
1)设置当前会话隔离级别
set session transaction isolation level read committed;
查看隔离级别
select @@global.tx_isolation,@@tx_isolation;
2)设置全局的隔离级别:(注意只能以超级用户身份设置)
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
理解全局的隔离级别与设置当前会话隔离级别:
设置当前会话(客户端)的隔离级别,当客户端关闭后重新进入,隔离级别会恢复到系统的全局隔离状态。理解‘当前会话’:MySQL中认为,打开一个客户端就是开启一个会话。其实质是建立一个网络连接。这个网络连接是有状态性的,一旦关闭,此会话级别中设置的变量就会恢复为系统的变量。
4、并发操作带来的数据的不一致性问题
脏读:
可以读取到其他事务修改但未提交的脏数据。
不可重复读:
在一个事务中重复读取相同数据。在其中两次读取数据之间有另一个事务修改并提交了该数据。使得事务两次读到的数据是不一样的。
幻读:
第一个事务对一个表中的数据进行了修改,这种修改涉及 到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有 修改的数据行,就好象发生了幻觉一样。
丢失更新:
多个用户同时对一个数据资源进行更新,必定会产生被覆盖的数据,造成数据读写异常。