记录一些mysql的知识点
强制走索引
1 | force index() |
查看mysql状态
1 | show processlist where host like "%%" |
查看sql效率
1 | explain sql |
select加锁(for update手工加锁语句)
1 | 乐观锁和悲观锁策略 |
例1:(明确指定主键,并且有此数据,row lock)
1 | select * from products where id='3' for update |
例2:(明确指定主键,若查无此数据,无lock)
1 | select * from products where id='-1' for update |
例3:(无主键,table lock)
1 | select * from products where name='Mouse' for update |
例4:(主键不明确,table lock)
1 | select * from products where id<>'3' for update |
例5:(主键不明确,table lock)
1 | select * from products where id like '3' for update |
存储emoji
1 | mysql server版本不低于5.5.3 charavter使用utf8mb4 |
mysql分区
1 | 查看是否支持分区:SHOW VARIABLES LIKE '%partition%'; |
1 | 1:Range分区 俗称:范围分区。根据表的字段的值,依据给定某段连续的区间来分区。 |
1 | ALTER TABLE teacher |
1 | 2:LIST分区 俗名:列表分区。其实list分区和range分区应该说都是一样的,不同的是range分区在分区是的依据是一段连续的区间;而list分区针对的分区依据是一组分布的散列值 |
1 | create table student |
1 | 3:HASH分区 小名:哈希分区。哈希分区主要是依据表的某个字段以及指定分区的数量 |
1 | create table user ( |
1 | 4:key分区 类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值 |
1 | create table role( id int(20) not null,name varchar(20) not null) |
MySQL事务隔离级别
1 | SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 |
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
未提交读 | 可能 | 可能 | 可能 |
已提交读 | 不可能 | 可能 | 可能 |
可重复读 | 不可能 | 不可能 | 可能 |
可串行化 | 不可能 | 不可能 | 不可能 |
Read Uncommit:未提交读。允许脏读。
Read Commit : 提交读。只能读到其他事务已提交的内容。允许不重复读。
Repeated Read : 可重复读。同一个事务内的查询与事务开始时是一致的。允许幻读。Mysql默认的级别。
Serializable : 串行化的读。每次读都要获取表级锁,读写互相阻塞