+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| tx_isolation | READ-UNCOMMITTED |
+---------------+------------------+
这个级别下,如果两个事务同时进行,任何一方的改变,对方都能看到,因为我们在设置的时候采用的是SESSION,会话的模式,所以两个终端都要进行READ UNCOMMITTED设置

所以这个的设置的并发性最好,但是受到的影响却是最大的
2.设置为READ COMMITED(读提交)级别
这个级别下,当其中的任意一个事务提交了,其他处于事务状态的就能同步到信息,如下图是没有提交之前的图,这个时候还不能看到

如果B的事务提交了,再来看看这个结果,如下图所示:

尽管A没有提交,但是也能看到信息了
3.设置为REPEATABLE READ(可重读)级别
如果设置为这个级别的话,两个同时进行的事务,相互不受影响,只用当两个事务都提交了才能看到所有变化的信息,否则,各自只能看到自己完成的
我现在打开两个终端A、B,同时进入事务
mysql> START TRANSACTION;//A进入事务状态
mysql> START TRANSACTION;//B进入事务状态
然后我在B事务状态下向表进行插入一行数据,然后在两个表中都查看,结果发现数据不一样,如下图所示:

如果我现在把B的事务提交了,再在A、B上查看,发现只有B上的有新插入的一行,而A任然没有,如图所示:

如果我现在把A的也提交了,在查看的话,两个就会出现数据同步了,如图所示:

这就是REPEATABLE READ级别的效果,就是两个事务操作的时候相互不干扰,只有当两个事务都提交了,数据才会同步。
4.设置为SERIABLIZABLE级别
这个时候只有当前一个事务执行完成并提交了,下一个事务才开始,做了更加严格的限制,所以一般不做这样的级别限制
同步:(clock)
通过锁机制来解决同步问题
锁:
共享锁(读锁):
独占锁(写锁):
写锁的优先级高于读锁
锁级别:
表锁,行锁,页锁(内存空间)
锁的实现:
服务器级别的;只能实现表锁
存储引擎级别的:可以实现行锁
>LOCK TABLES tab_name READ;加锁
>UNLOCK TABLES;释放锁
(注意:如果在InnoDB中,定义时候并不生效,只有真正的事务开始,
定义的锁才生效)
降低粒度,可以更好的支持并发性,这样锁的颗粒就越小,类似行锁,锁的
范围小一些。
MYSQL的用户管理:
创建用户
CREATE USER username@host
删除用户
DROP USER username@host
授权
GRANT PRIV_LIST ON db.table TO username@host [IDENTIFIED BY 'redhat'];
收回权限
REVOKE priv_list ON db.table FROM username@host;
WITH GRANT OPTION 同时把授权也一并授权给他
设置其使用的资源:
WITH MAX_QUERIES_PER_HOUT N;每个小时只能做N次查询
WITH MAX_UPDATES_PER_HOUT N每个小时只能做N次更新
WITH MAX_CONNECTIONS_PER_HOUT N 每个小时只能做N次连接
WITH MAX_USER_CONNECTIONS N 每个用户同时最大连接数
FLUSH USER_RESOURCES;
GRANT SELECT(name) ON db.table TO uername@host;字段级别的权限
执行存储过程的权限
GRANT EXECUTE ON XXXX TO username@host
忘记MySQL的密码:
方法1.重装数据库
方法2.
vim /etc/init.d/mysqld
先停止MySQL服务
#service mysqld stop
找到mysqld的二进制文件的位置,我这里就在/user/local/mysql/下
#/user/local/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking & 后台运行安全模式
然后连接数据库
#mysql
>use mysql
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='localhost';
>UPDATE user SET Password=PASSWORD('redhat') WHERE User='root' AND Host='127.0.0.1';
#killall mysqqld
#service mysqld start
#mysql -uroot -p 登录
作者 “IT梦-齐-分享”