覆盖索引
索引的原理,最左匹配 ,索引的优缺点
数据库的索引,索引数据结构,数据库索引了解吗?表中选择哪些做索引?
数据库引擎
数据库锁,乐观锁和悲观锁,以及怎么实现的
CAS的缺点 ( CAS另一个无锁解决方案,更准确的是采用乐观锁技术,实现线程安全的问题)
数据库死锁的原因,怎么解决
mysql 实现分页
数据库的删除操作(SQL几种删除方式):Drop,delete,truncate
用法:
Delete :用于删除表中的行(可以删除某一行,也在可不改变表结构,索引,属性的情况下删除所有行),只删除表中的数据
删除所有行:delete * from tablename
删除部分行:delete tablename where column = values1
Drop:用于删除表(表的结构、属性、索引也会被删除)
drop tablename
Truncate:用于删除表内的数据(只删除表内的数据,不删除表本身)。相当于delete 不写where语句
truncate tablename
相同点:
drop,delete,truncate 都可以用来删除表的数据
delete,truncate只删除表中的数据,保留表结构
不同点:
Delete:
属于数据操作语言(DML),不会自动提交事务,需要commit提交,这个操作才会放入到rollback segement中,事务提交之后才生效;
如果有相应的trigger(触发器)。执行的时候会被触发
执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
delete语句不影响表占用的extent
高水线(High watermark)保持原位置不变
Drop:属于数据定义语言(DDL),可以自动提交事务
drop语句删除表数据的同时删除表结构(删除表的结构,约束(constrain),触发器(trigger),索引(index));依赖该表的存储过程/函数将会被保留,但变成invalid。
drop语句将表所占用的空间全部释放
Truncate:删除表内容,释放表空间,保留表结构。相当于delete 不写where语句
不适用事务处理即和事务无关
一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。
在删除的过程中不会激活与表有关的删除触发器。执行速度快
truncate语句在缺省情况下,将空间释放到minextents(盘区)个extent,除非使用reuse storage
truncate会将高水线复位(回到最开始)
删除速度:drop>truncate>delete
使用场景:
当你不再需要此表时,用drop
当你仍要保留此表,但要删除所有记录时,用truncate
当你要删除部分记录时,用delete
**注意:**对于有主外键关系的表,不能使用truncate而应该使用不带where语句的delete语句,因为truncate不记录在日志里,不能够激活触发器
主从复制
B+树;