1.MySQL事务的四大特性(ACID)
原子性(Atomicity):事务被当作一个整体处理,对于数据库的操作要么全部执行,要么全部失败。如果事务在处理过程中发生异常,那么以后的操作就会回滚到操作前的状态,或者是上一个节点。
一致性(Consistency):事务开始和结束,数据不会被破坏,状态一致。
隔离性(Consistency):多个事务并发访问时,相互隔离。隔离性避免了事务交叉执行时,数据的不一致。事务的隔离级别有:未提交读,提交读,可重复读以及序列化。
持久性(Durability):数据一旦提交就会被永久写到数据库中。
2.事务的隔离级别
未提交读(READ-UNCOMMITTED):最低隔离级别,事务未提交时就可以被其他事物读取,容易出现脏读、不可重复读、幻读。
提交读(READ-COMMITTED):事务提交后才可以被其他事务所读取,容易出现不可重复读、幻读。
可重复度(REPEATABLE-READ):保证对于同一个数据,在事务开始前和结束后是一致的,禁止读未提交数据,容易出现幻读。
序列化(SERIALIZABLE):最高隔离级别,可避免出现脏读、不可重复读、幻读。
3.脏读、不可重复读、幻读?
脏读:在自己的事务里读到了其他事务未提交的数据;
不可重复读:对于同一条数据,两次连续查询之间并发执行一个修改事务,导致读取获得的数据不一致;
幻读:对于同一个表,两次连续查询之间并发执行一个新增或者删除事务,导致读取的数据库结果集不一致。
【不可重复读、幻读区别:不可重复读是同一条数据出现不一致,幻读是同一表结果集出现不一致;不可重复读多是并发了一个修改操作,幻读多是并发一个增加或者删除操作】
4.说一下 mysql 常用的引擎?
MyIAM:MySQL默认引擎,但不提供事务支持,外键,行级锁。当进行写操作时,会锁表导致效率较低;但是保存了表的行数,在执行select count(*)时,可以直接读取已经保存的值,而不需要全表查询。因此,如果不需要事务支持且读表操作远多于写表操作,推荐使用MyIAM。
InnoDb:提供事务支持、外键和行级锁,但是不保存行数,因此当进行 select count(*) from table 指令的时候,需要进行扫描全表。并且由于锁的粒度小,执行写操作时,不会锁全表,在并发度较高场景下还能提高效率。InnoDb适合于大容量数据库系统,并且支持自动灾难恢复。
5.说一下 mysql 的行锁和表锁?
MyIAM仅支持表锁,InnoDb则支持行锁和表锁,且默认是行锁。
行锁:开销大,加锁慢,容易发生死锁,锁粒度小,发生锁冲突概率小,并发量大。
表锁:开销小,加锁快,不发生死锁,锁粒度大,发生锁冲突概率最大,并发量小。
6.悲观锁和乐观锁?
乐观锁:在操作数据时,乐观锁持乐观态度,即认为别人不会同时修改数据,因此不上锁,只在更新的时候判断一下在此期间是否有人修改数据,如果有则放弃操作,否则执行。
悲观锁:在操作数据时,悲观锁持悲观态度,即认为别人会同时修改数据,因此会加锁,把数据锁住,直到其对数据的操作结束才解锁。在此期间其他事务不能对此数据进行操作。
7.数据库三范式?
第一范式(1NF):表的字段具有原子性,不可再分。
第二范式(2NF):在1NF基础上,对表设主键,使之具有唯一标识。
第三范式(3NF):在2NF基础上,保证表不冗余,即表中不包含其他表的非主关键字信息。
8.主键、外键?
主键(primary key):唯一,不可为空,不可重复;
外键(foreign key):可多个,可以为空,可以重复。
9.表连接方式?
内连接,左外连接,右外连接,笛卡尔积。
9.1 左外较内连接更高效? Y,因为左外连接,左表是无脑显示,仅过滤右表数据;而内连接则需要过滤两表内容相匹配的数据,因此左外比内连接更高效。
10.数据库查询语句慢要如何优化?
其一,加索引;其二,尽量避免全表查询,简化查询字段;其三,减少表之间的关联;其四,选择正确的存储引擎。
11.什么样的字段适合建索引?
经常被查询,不经常修改,不为空且不重复
12.索引类型?
主键索引,唯一索引,非唯一索引,普通索引,聚集索引,非聚集索引,B-tree索引等。
13.union和unionall?
union:对于结果去重。
unionall:对于结果不去重,只是单纯将两个结果合并返回。但是效率要比union高。
14.常用的Oracle数据库函数?
聚合函数(Max,count,avg,sum),random,replace,to_char,NVL等。
15.Oracle分页与MySQL分页
Oracle:rownum;MySQL:limit
16.drop,delete,truncate?
drop:删除内容以及定义,释放表空间;
delete:删除内容,不删除定义,不释放表空间;
truncate:删除内容,不删除定义,释放表空间。
参考链接: