一、数据库
-
关系型数据库(sql,外键约束)
Mysql、SQLLite、SQLServer、Oracle -
菲关系型数据库(NoSql,键值对)
Redis、MongDB
二、Mysql的存储引擎
Mysql是一个单进程多线程架构的数据库,Mysql数据库是咧在系统上表现为一个进程,它的数据表以文件的形式存在磁盘。
1、MYISAM存储引擎
在没有InnoDB存储引擎之前,Mysql默认使用MyIsam存储引擎。
1)不支持事务
2)数据表锁
3)没有外键约束
4)全文索引
5)表空间小
2、InnoDB存储引擎
1)第一个支持事务的
2)数据行锁
3)外键约束
4)全文索引、B+树索引、哈希索引
5)表空间大
MyISAM与InnoDB区别?
1、MyISAM节约空间及相应速度,InnoDB安全性高,因为有事务支持,适合多用户操作数据库。
2、delete完,重启数据库,InnoDB自增是从1开始的,MyISAM是继续上一个。这就是内存与文件的区别
B+树索引
二叉搜索树----平衡二叉搜索树(AVL)------B树-----B+树
B+树在数据库中分为聚集索引和辅助索引。
聚集索引:它根据每张表的主键构造一个B+树,叶子节点存放整表的行数据。B+树的索引是双向链表
辅助索引:根据每张表创建索引列构造一棵B+树。叶子节点并不包括记录的全部数据,只包括键值和书签
3、NDB存储引擎
4、Memory存储引擎
5、归档存储引擎
6、Federated存储引擎
7、Maria存储引擎
三、事务
A、C、I、 D
原子性:要么都成功,要么都失败
一致性:事务前后要保持一致
持久性:事务一旦提交,便持久化到数据库,不能修改
隔离性:多个用户操作同样的功能,互相不影响
四种隔离级别:
第一种:读未提交(脏读):一个事务读取了另一个事务未提交的数据。
第二种:读提交的(不可重复):在一个事务中读取表中某一行数据,多次读取结果不一样
第三种:重复读(幻读):一个事务读取到别的事务插入的数据,导致前后结果不一样
第四种:序列化:这是隔离级别中最高级的,可以避免脏读、不可重复读、幻读。耗性能,不建议使用。
Mysql默认幻读
四、JDBC与数据库连接池
由于一个应用程序可能需要和多个数据库建立连接,就需要加载多个数据库驱动,为了简化数据库操作,就加了JDBC。
问题: statement与PreparedStatement区别?
答:防止sql注入。
结:面试题
1.Mysql如何优化?
答:
sql语句中in包含的值不应过多。
seclet语句务必指明字段名称。
不使用ORDER BY
2.索引什么时候失效?
答:
查询条件有字符串,要有’'包起来
where语句中使用or
左外连接
3.(中国、地区、省份)如何建表?
答:?
4.mysql索引,abc三个数据,单取ac或者bc会不会命中索引?
答:A、C查询的时候虽然使用了索引,实际其实只用了A,而不是AC。B、C查询的时候并不会使用索引