介绍一下聚簇索引和非聚簇索引
聚簇索引(innobe)的叶子节点就是数据节点 而非聚簇索引(myisam)的叶子节点仍然是索引文件 只是这个索引文件中包含指向对应数据块的指针
索引失效
where用了!=
使用了函数
模糊搜索时使用了非前缀,如“like %abc”
选择性低
Or条件
ACID
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。事务必须是使数据库从一个一致性状态变到另一个一致性状态。多个账户钱的总和不变
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。(即事务隔离级别)(转钱时,从其他用户角度看)
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
事务的隔离级别
1、脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
2、不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
3、虚读(幻读)
在同一个事务中,同一个查询多次返回的结果不一致。事务A新增了一条记录,事务B在事务A提交前后各执行了一次查询操作,发现后一次比前一次多了一条记录。就好像产生幻觉一样,这就是发生了幻读。
数据库的隔离级别
1、未提交读(READ UNCOMMITTED)
事务中的修改,即使没有提交,对于其他事务来说也是可见的。也就是说事务可以读取未提交的数据,也就是脏读(Dirty Read).
这是最低的隔离级别,实际的应用中一般不用这种隔离级别。
2、提交读(READ COMMITTED)
一个事务所做的修改在提交前对于其他事务是不可见的。所以一个事务中两次执行同样的查询,有可能会产生不一样的结果,
因此这个隔离级别也成为不可重复读(nonrepeatable read)
3、可重复读(REPEATABLE READ)
可重复读保证了同一个事务中对同样记录的查询结果是一致的,所有他不会产生以上两种隔离级别的脏读和结果不一致情况。无法解决幻读。(InnoDB.XtraDB采用MVCC解决幻读)。
4、可串行化(SERIALIZABLE)
可串行化是最高的隔离级别,通过强制事务串行执行来避免前面说的问题。
简单说,他会在读取的每一行上都加上锁,所以会导致大量的超时 和锁争用问题。
实际应用中很少用到这个,除非需要确保数据的一致性并且没有并发的情况下才考虑。
sql相关,sum与count区别
SUM是对符合条件的记录的数值列求和
COUNT 是对查询中符合条件的结果(或记录)的个数
group by用法,注意事项
数据库死锁/如何防止
sql中join的几种操作的区别
union和union all的区别,谁的效率更高
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序
Union All:对两个结果集进行并集操作,包括重复行,不进行排序
用distinct和用group by去重
mysql存储引擎
存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Blackhole, 5. CSV, 6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam
MyISAM和InnoDB的主要区别和应用场景 - CSDN博客
MySQL主从复制
Mysql主从同步(复制) - kylinlin - 博客园
explain