大一点的公司会问很多很基础的东西,甚至概念型的。索引和事务一般问的比较多
1.什么是关系型数据库?什么是非关系型?
基于关系模型设计的数据库。关系模型是基于二维表以行列形式存储数据
2.事务:
一个数据库操作序列,要么全做要么全不做
结束标记:commit(正常)、rollback(异常)
特性:原子性(要么全都做要么全都不做)
一致性 (无论系统处于何种状态,都能保证数据库中数据处于一致状态)
隔离性 (两个或者多个事务可以同时运行不相互影响)
持续性(事务一提交对数据库的改变是永久的)
并发引起的数据不一致性:
丢失数据修改 :T1 T2同时读一数据并进行修改,T1的修改被T2覆盖了
读脏数据 :T1改了T2读然后T1又撤销修改了,这样T2读到的就和数据库的不一致就是脏数据
不可重复读 :T1读了某数据,T2改了T1读的数据,T1再读的时候和第一次读的不一样
产生幽灵、幻影 数据:T1读了某些记录,T2添加或者删除了其中一些,T1再按相同条件读的时候发现多了、消失了一些记录
隔离级别:可串行化 可重复读 读已提交 读未提交
事务这块,javaee 的讲完后可以联系一下 spring aop 对事务的处理---》再联系一下设计模式之代理模式
锁:一种并发控制机制
S锁 :share 事务T对数据对象A加S锁,T就可以读A,但不能改A。其他事务只能再对A加S锁,不能加X锁。直到T释放A上的S锁。防止写操作破坏数据一致性
X锁:exclusive 事务T对数据对象A加X锁,只允许T读写A ,其他事务对A不能有任何操作,不可读写
封锁协议:
一级:T对要改的加X锁 防止丢失修改
二级:T对要改的加X锁,T对要读的加S锁 防止丢失修改防读脏数据
三级: T在读取数据前必须加S锁 防不可重复读
死锁:T1封锁R1 T2封锁R2 T2又申请R1
3.索引:
唯一索引和主键的区别:
主键是基本表的约束条件,索引是基本表的目录
索引有助于提高查询效率,但是会占磁盘空间,表中数据更新时候系统得自动维护索引
对仅用于查询的表多建立索引,对数据更新比较频繁的表少建索引
索引包含索引建和指针,指针指向数据
主索引:索引域是表的主键,每个索引值对应唯一的一个记录,索引指针域只存1个指针
索引域不是主键,一个索引可能存在多个指针
唯一索引unique
非唯一索引
聚簇索引cluster 索引项的顺序和表中记录的物理顺序一致(1个表只能有1个)
非聚簇索引
4.连接查询:
left join on 不限制左边
right join on
5.权限设计原则
这个问题是某家公司的面试题目,不造具体问的是系统权限还是说数据库权限
答案还没考虑好 ,下面是数据库权限上的基本概念:
权限:控制用户如何访问数据库对象
用户可以作为角色的一个成员间接得到权限,也可直接分配到权限,用户还可以有多个角色(拥有不同的权限)
6.sql优化原则
(1)尽量使用列名不用*
*代表所有列,对不同的数据库*的含义不一样。需要先解析*到底指的是哪些列。耗费时间cpu
(2)-优化2: where解析的顺序: 右-> 左
(3)
(4)
剪切 (Ctrl+X)复制 (Ctrl+C)粘贴 (Ctrl+V)粘贴文本段落标签字体字体大小加粗 (Ctrl+B)斜体 (Ctrl+I)下划线 (Ctrl+U)删除线字体颜色背景颜色删除文字格式对齐列表减少缩进增加缩进超链接 (Ctrl+L)取消超链接图片表情表格插入代码引用CODE代码片源代码关于 xhEditor