1. 数据库语言分为四大类:
查询,操纵,定义,控制语言四大类。
查询:select,From,where
操纵:插入,更新,删除
定义:创建数据库的各种对象 表,视图,索引,同义词,聚簇
控制:授权,回滚,提交(显示提交,隐式提交,自动提交)
2. 什么是内外连接?
内连接:只连接匹配的行
左外连接:包含左边的全部行,以及右表中全部匹配的行。
右外连接:包含右边的全部行,以及左表中全部匹配的行。
全外连接:包含左右两个表的全部行,不管另一边表中是否存在与他们匹配的行。
交叉连接:不适用任何匹配或选取条件,而是直接将一个数据源中的每个行与另一数据源的每个行都一一匹配。
3. drop,truncate,delete区别:
drop:直接删掉表
truncate:删除表中数据,再插入时自增长id又从1开始
delete:删除表中数据,可以加where子句
4.什么是视图?优缺点?
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口。
优点:
- 对数据库的访问,因为视图可以有选择性的选取数据库的一部分。
- 用户可以通过简单的查询可以从复杂查询中得到结果。
- 维护数据库的独立性,视图可以从多个表中检索数据。
- 对于相同的数据可产生不同的视图。
缺点:
查询视图时,必须把对视图的查询转换成对基本表的查询,如果这个视图由一个复杂的多表查询所定义,那就无法更改数据。
5. 什么是视图?什么是游标?
视图是一种虚拟的表,具有和物理表相同的功能,可以对其进行增删查改。视图通常是由一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使我们获取数据更容易,相比多表查询。
游标:是对查询出来的结果集作为一个单元来进行有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改,一般不使用游标,但需要逐条处理数据时,游标显得十分重要。
索引
6. 什么是索引?索引的作用?优缺点?
索引是一个数据库管理系统中一个排序的数据结构。
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这种数据结构以某种方式引用数据,这样就可以在数据结构上实现高级查找算法。这种数据结构就是索引。
作用:协助快速查询,更新数据库表中的数据。
优点:
- 创建唯一的索引,可以保证数据库中每一行数据的唯一性。
- 加快数据检索的速度
- 加速表和表之间的连接
- 使用分组和排序子句进行检索,减少查询中分组和排序的时间。
- 通过索引,使用优化隐藏器,提高系统性能。。
缺点:
6. 创建索引,维护索引要耗费时间,这种时间随着数据量的增加而增加。
7. 占用物理空间
8. 对表中数据进行增删操作时,索引也要动态维护,降低了数据的维护速度。
7.什么样的字段适合建索引?
唯一,不为空,经常被查询的字段。
8. 事务:
事务是对数据库中一系列操作进行统一的回滚或提交的操作,保证数据的完整性和一致性。
9. 事务的四大特性:
-
原子性:保证事务的总体目标,当数据被修改时,要么全部成功,要么全部失败回滚。
如果操作不小心失败了,不能对数据库有任何影响。 -
一致性:事务开始前和结束后,数据库必须保持一致性的状态。
比如A向B转账,B没收到。 -
隔离性:当多个用户并发访问数据时,一个用户的事务不能被其他用户的事务所干扰。
多个并发事务之间要相互隔离。
隔离性解决临时更新和消除级联回滚。
比如A从一张银行卡中取钱,在A取钱过程结束之前,B不能向此卡转账。
同一时间,只允许一个事务请求同一数据,不同事务之间彼此没有任务干扰。 -
持久性:一个事务一旦被提交。对数据库的影响时永久性的。即使在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
10 .事务的并发?事务的隔离级别,每个级别会引发什么问题?
事务彼此应该完全隔离,以避免并发事务所导致的问题,但那样会对性能产生极大的影响,因为事务必须按顺序执行,在实际开发中为了提升性能,事务会以较低的隔离级别运行,事务的隔离级别可以通过隔离事务属性指定。
事务的并发问题:
- 脏读 :事务A读到了事务B更新的数据,然后事务B进行回滚操作,那么A读到的就是脏数据。
- 不可重复读:事务A 多次重复读取同一数据,事务B在事务A多次读取的过程中做了更新并提交,事务A再次读取的数据就与之前的不一致。
我读取到自己的工资是1000,与此同时(事务2)财务人员修改我的工资为2000,并提交了事务 ,我再次读取到自己的工资时,工资变成了2000. - 幻读:事务A对表中所有行的某个数据从”1“该到”2“,事务B又在表中插入了一行数据项,这个数据项的数值为1并提交给数据库,事务1的用户再查看刚刚修改的数据,会发现跟没修改一样,其实是从事务2添加的。这就是发生了幻读。
不可重复读侧重于修改,幻读侧重于新增或删除。
11.事务的隔离界别
- Read unCommitted: 读未提交。一个事务可以读另一个事务未提交的数据。(读到未提交的就是脏读)
如何解决脏读? - Read Committed: 读提交。一个事务等待另一事务提交后才能读取数据。(但是会出现一个事务范围内,两个相同的查询却返回了不同的数据,这就是不可重复读)
如何解决不可重复读? - Repeatable read: 开始读取数据时(事务开启时),不允许其他事务进行修改操作。(不可重复读对应的是更新的操作,但可能出现幻读的问题)
如何解决幻读? - Serializable序列化: 最高的事务隔离界别,该级别下,事务串行化顺序执行,避免脏读,不可重复读,幻读,但效率很低,消耗数据库性能,一般不用。
MySQL默认是Repeatable read。