事务
事务就是一组dml语句组成,这些语句在逻辑上存在相关性,这一组dml语句要么全部成功,要么全部失败,是一个这你。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。
基本使用:
开始一个事务
start transaction;
做一个保存点
savepoint 保存点名;
进行各种操作
如果需要,可以回到保存点名
rollback to 保存点名ction
如果没有设置保存点,也可以回滚,只能回滚到事务的开始(意味着表中的所有数据都没有了)。直接使用rollback(前提是还没有提交)
如果一个事务被提交了,则不可以回退。
可以选择回退到哪个保存点
InnoDB支持事务,MyISAM不支持事务。
开始事务可以使start tansaction也可以使set auto commit=0;
事务的隔离级别
当MySQL表被多个线程或者客户端开启各自事务操作数据库发生不可重复读中的数据时,MySAL提供了一种机制,可以让不同的事务在操作数据时,具有隔离性,从而保证数据的一致性。
如果不考虑隔离性,可能会引发一下问题:
脏读:一个客户端(事务)会读取到另外一个客户端(事务)没有提交的修改数据。
不可重复读:同一个查询在同一个人事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时
发生不可重复读。
幻读:同一个查询在同一个事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生欢度。
事务的隔离级别有几种:
事务的ACID特性
1.原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.一致性:事务必须使数据库从一个一致性状态变到另外一个一致性状态。
3.隔离性:是指多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4.持久性:指一个事务一旦被提交,它对数据库中的修改就是永久的,接下来即使数据库发生故障也不应该对其有任何影响。
视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
创建视图
create view 视图名 as select 语句;
删除视图
drop view 视图名;
视图和表的区别
1.表要占用磁盘空间,视图不需要。
2.视图不能添加索引。
3.使用视图可以简化查询
4.视图可以提高安全性。
MySQL用户管理
字段解释:
host:表示这个用户可以从哪个主机登录,如果是localhost,表示只能从本机登陆。
user:用户名
password:用户密码,加密后的
以及用户拥有的权限。
创建用户
create user '用户名'@'登陆主机/ip' identified by '密码';
删除用户
drop user '用户名'@'主机名'
修改用户密码
自己修改自己的密码:set password=password('新的密码');
root用户帮你修改:set password for '用户名'@'主机名'=password('新的密码');
MySQL数据库的权限
给用户授权
刚创建的用户没有任何权限。需要给用户授权。
语法:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置'[identified by '密码']
说明:
1.权限列表,多个权限用逗号分开
grant all[privileges] on..--表示富裕该用户在该对象上的所有权限。
2. .:代表本系统中所有数据库的所有对象(表,视图,存储过程等)
3.库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)
4.identified by 可以省略可以写
如果用户存在,富裕权限的同是修改密码。
如果该用户不存在,就是创建用户。
如果发现赋权限之后,没有生效,执行如下指令:
flush privileges;
回收权限
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';