MYSQL——访问控制、事务处理与并发控制(2)

156 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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、并发操作带来的数据的不一致性问题

脏读:

       可以读取到其他事务修改但未提交的脏数据。

不可重复读:

       在一个事务中重复读取相同数据。在其中两次读取数据之间有另一个事务修改并提交了该数据。使得事务两次读到的数据是不一样的。

幻读:

       第一个事务对一个表中的数据进行了修改,这种修改涉及 到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有 修改的数据行,就好象发生了幻觉一样。

丢失更新:

       多个用户同时对一个数据资源进行更新,必定会产生被覆盖的数据,造成数据读写异常。