一、MySQL的用户管理
1.用户介绍
在MySQL中,会涉及到用户的连接登录的内容,这些内容都存在在MySQL的mysql数据库user表中,在这个表中,涉及到这个用户的权限问题,包括以下内容。
1.是否可读数据库
2.是否可以读写数据库
3.有哪些数据库的操作权限
通常会在数据库中,有一个超级权限用户默认为root
2.用户操作
2.1增加用户
SQL语法
CREATE USER 用户 [IDENTIFIED BY ‘password’];
其中用户=’用户名’@’主机名’
例子
CREATE USER ‘ALEX‘@‘LOCALHOST‘
IDENTIFIED BY ‘123456‘;
2.2增加权限
SQL语法
GRANT privi_type ON table_name TO 用户;
# Privi_type: select ,delete, update ,insert, create, drop,usage all…..
# with grant option 表示允许该用户将权限授予其他用户
# 注:若指定密码,则原密码将会被覆盖,如果权限授予一个不存在的用户,则MySQL会自动创建这个用户,但必须为该用户指定密码。
# 用户=‘用户名‘@‘主机名‘
2.3删除用户
SQL语句
DROP USER 用户;
其中用户:用户=’用户名’@’主机名’
2.4回收权限
使用REVOKE命令可以回收授予的权限,语法格式如下:
REVOKE priv_type ON {表名|数据库名} FROM 用户;
或REVOKE ALL PRIVILEDGES, GRANT OPTION FROM 用户;
注:只有拥有当前数据库全局CREATE或者UPDATE权限的用户才能使用REVOKE命令。
例如:
revoke update on dbst.student from ALEX@localhost;
revoke ALL ON DBST.* from ALEX@LOCALHOST
2.5修改用户
UPDATE MYSQL.USER SET PASSWORD= PASSWORD(‘新密码’) WHERE USER=‘用户’;
例如:
UPDATE MYSQL.USER SET PASSWORD=PASSWORD(‘123’) WHERE USER=‘ALEX’ AND HOST=‘LOCALHOST’;
flush privileges; //刷新权限(必须步骤)
update mysql.user set authentication_string=‘123‘ where user=‘alex‘ and host=‘loacalhost‘;
2.6查找用户
# 从mysql中选取数据
select * from user
2.7查看权限
# 使用下面的指令查看用户权限
show grants for ‘alex’@’localhost’;
二、MySQL的事务管理
1.事务概念
事务是由作为一个单独单元的一个或多个SQL语句组成。事务具有以下的几个特性(ACID)
ACID原则(事物具有的特性)
A:原子性(Atomicity):事务是一个或多个行为捆绑在一起组成一个单独的工作单元,事务中的动作要么都发生,要么都不发生.
C:一致性(Consistent):即在事务开始之前和结束之后,数据库的完整性约束没有被破坏.
I:隔离性(Isolation):指的是在并发环境中,事务之间互相影响的程度(即并发事务间数据的可见程度).由并发事务所做的修改必须与任何其他并发事务所做的修改隔离.
D:持久性(Durability):一旦事务完成,事务的结果应该持久化,用来保证即使系统崩溃也不会破坏事务的结果.
2.并发控制
1.丢失修改:两个不同的事务同时获得了相同的数据,又都对这个数据进行了修改,那么先提交的事务的更新就会被后提交事务的更新覆盖掉。
2.脏读(未提交读) :一个事务正在访问数据,而其他事务正在更新该数据,但尚未提交,此时会发生脏读问题,即第一个事务所读取的数据是“脏”的。
3.不可重复读:在一个事务内多次读同一数据,在该事务还没有结束时,另外的事务也访问该数据并对其做修改,从而导致第一个事务两次读取的数据不一样
4.幻读:有两种情况
(1):事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按照相同条件读取数据时,发现某些记录神秘的消失了.
(2):事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按照相同条件读取数据时,发现多了一些记录.
3.四种隔离级别
四级隔离级别:定义用户之间隔离和交互的程度
1.读未提交(read uncommitted):可以读到其他事务还没有提交的数据,但不允许丢失修改,会导致大量数据变化。一级*协议
2.读已提交(read committed):可以看到其他事务添加的新纪录,而且其他事务对现存记录做出的修改一旦被提交,也可以看到,避免丢失修改和脏读。二级*协议
3.可重复读(repeatable read):当前在执行的事务的变化无法被看到,同一事务中执行select数次结果都相同,避免丢失修改、脏读和不可重复读。增强的二级*协议
4.可串行化(serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行,避免所有并发控制问题。三级*协议
注:MySQL默认为repeatable read隔离级别
三、事务控制
1.控制语句
MYSQL事物控制语句
begin //开始一个事物
commit //提交一个事物
rollback //回滚一个事物
Set autocommit ={0|1} //为0是不自动提交, 为1是自动提交
2.事务安全
在pymysql中,如果不使用commit提交添加的事务,数据库中会出现这个数据,但是在此使用就会出现bug,因此pymysql在一定的情况下,属于线程不安全。