跳转至

9. 补充知识

定义: 解决客户端并发访问的冲突问题

读锁(共享锁)

查询(select): 加读锁之后,别人不能更改表记录,但可以进行查询

写锁(互斥锁, 排他锁)

更新(update): 加写锁之后别人不能查,不能改

锁粒度
1. 行级锁(Innodb)

select : 加读锁,锁1行     
update : 加写锁,锁1行     
2. 表级锁(MyISAM)
select : 加读锁,锁一张表      
update : 加写锁,锁一张表     

存储引擎

(engine: 处理表的处理器)

基本操作命令

1. 查看所有打存储引擎
    show engines;

2. 查看已有表的存储引擎
    show create table 表名;

3. 创建表时指定存储引擎
    create table 表名(...)engine=MyISAM;

4. 更改已有表的存储引擎
    alter table 表名 engine=MyISAM;

常用的存储引擎的特点

InnoDB特点
  1. 支持事务/外键/行级锁
  2. 共享表空间
    表名.frm: 表结构和索引信息
    表名.idb: 表记录
MyISAM特点
  1. 支持表级锁
  2. 独享表空间
    表名.frm 表结构
    表名.MYD 表记录
    表名.MYI 索引信息
Memory特点
  1. 数据存储在内存中,速度快
  2. 服务器重启,MySQL 服务重启后表记录消失

如何决定使用哪个存储引擎

  1. 执行查询操作多的表,使用MyISAM(使用InnoDB浪费资源)
  2. 执行写操作多的表,使用InnoDB

MySQL用户账户的管理

  1. 开启MySQL的远程连接 (改配置文件)

    1. sudo -i
    2. cd /etc/mysql/mysql.conf.d/
    3. cp mysqld.cnf/mysqld.cnf.bak # 备份
    4. vim mysqld.cnf
      #bind-address=127.0.0.1   
      按a -> 改内容 -> esc -> shift + :wq   
      把前面的#去掉,保存退出   
      
    5. /etc/init.d/mysql restart
  2. 用root用户添加授权用户

    1. 用root用户登录MySQL
      mysql -uroot -p

    2. 授权

      mysql> grant 权限列表 on 库名.表名   
             to '用户名'  
             @'%' identified by '密码'  
             with grant option;  
      权限列表   
          all privileges   所有的权限  
          select           查询  
          update           更新  
      
      库名.表名
          db4.* / *.*(所有库的所有表)
      

示例

1. 添加一个授权用户tiger, 密码123, 对所有库的所有表有所有的权限,可以从任何ip连接数据库
    grant all privileges on *.*
    to 'tiger'@'%'
    identified by '123'
    with grant option;

2. 添加授权用户rabbit, 密码123, 对MOSHOU库所有表只有查询权限,可以从任何ip连接
    grant select on MOSHOU.*
    to 'rabbit'@'%'
    identified by '123'
    with grant option;