MySQL的事务管理与视图特性

MySQL的默认存储引擎InnoDB支持事务,MyISAM不支持事务。所谓事务,在MySQL中就是一组“在一条船上的”DML语句,它们之间有逻辑关联性,他们“同生共死”.
事务中还有一个非常重要的概念叫做保存点:处于事务开始和结束之间,设置一个叫做保存点的东西,他能够保留事务进展的中间过程,这样做的好处在于,当事务的DML语句一旦失败,不会使得全部DML语句失败从而只能回滚回到事务开始,而是回滚到保存点保存的语句位置,因此保存点以前的事务都能得以存留,不会全部失败,提高了工作效率,便于回滚。
但是事务一旦提交,保存点失效,回滚也不能生效。

开始一个事务

start transaction; 

创建一个保存点

savepoint 保存点名;

回到保存点(根据具体情况)

rollback to 保存点名;

提交事务

commit;

当多个客户端操作操作数据库时不进行隔离会出现的问题:

**脏读:**是指当一个事务正在修改数据,还没有提交到数据库,但另一个事务也访问了这个数据,然后看到使用了这个数据
**幻读:**是指由于事务的插入或删除操作,在一个事务内看到数据的个数不一样的情况
**不可重复度:**是指由于事务的修改,另一个事务在访问时,读到两个不一样的数据。

因此需要对数据库进行隔离操作:
设置事务隔离级别:
set session transaction isolation level read uncommitted;(读未提交:会出现脏读,幻读,不可重复读,不加锁读)

set session transacion isolation level read committed;(读已提交:会出现幻读、不可重复读、不加锁读)
set session transaction isolation levael repeatable read;(可重复读:会出现不加锁读)

set session transaction isolation levael serializable;(可串行化:加锁读)
可串行化:当客户端A执行可串行化隔离时,执行了select 语句,DBMS就会对库加锁,此时有客户端B要执行update操作时,只要锁没释放,就会把客户端B放入等待队列,直到锁释放。

查看当前隔离级别:

select @@tx_isolation;

事务的ACDI特性:
A(Atomicity):原子性
C(Consistency):一致性
D(Durability):持久性
I(Isolation):隔离性

视图特性

视图是一个虚拟的表,其内容由查询定义,但是视图的变化会影响到基表,基表变化也会影响到视图。,视图可以提高安全性,但也必须具有足够的权限,因此还与后面提到的用户管理知识息息相关。
创建视图

create view 视图名 as select语句

若select语句中有order by 语句在视图中也使用order by 语句,会以select中的order by 语句为准,后者的order by 语句不生效。
视图不能添加索引,也不能有关联的出发器

用户管理

root 用户拥有所有权限,如果只使用root用户,会带来安全隐患。因此需要创建新的用户,并赋予一旦定的权限,以此规避安全隐患。
创建用户:

create user '用户名'@‘登陆主机’/ip identified by ‘密码’;

删除用户:

drop user '用户名'@‘主机名’;

修改用户密码
1.自己改自己密码

set passworld = passworld('新密码');

2.root 用户修改指定用户密码

set passworld for '用户名'@‘主机名’=passworld('新的密码');

数据库的权限列表:
在这里插入图片描述
给用户授权:

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

如果赋权限未生效:

flush privileges;

回收权限:

revoke 权限列表 on 库.对象名 from ‘用户名’@‘登陆位置’;

猜你喜欢

转载自blog.csdn.net/weixin_42962924/article/details/83746589