数据库基础和sql语法

数据库基础和sql语法
1.数据库三范式是什么?
第一范式(1NF):字段具有原子性,不可再分。所有的关系型数据库都满足第一范式
数据库表中的字段都是单一属性的,不可再分。例如姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须涉及成两个独立的字段
第二范式(2NF):是在第一范式的基础上建立的,即满足第二范式必须先满足第一范式
要求数据库表中的每个实例或行必须可以被唯一的区分,通常需要为表加上一个列,以储存各个实例的唯一标识。这个唯一属性被称为主键或主关键字。
第二范式要求实体的属性完全依赖于主键。所谓完全依赖是指不能存在仅依赖主键一部分的属性,如果存在,那么这个属性和主键的这一部分应该分离出来形成一个新的实体。,新实体
与原实体之间是一对多的关系。为实现区分通常为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字
第三范式(3NF:满足三范式必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其他表中已包含的非主关键字信息。
所以第三范式具有以下特征:
a.每一列只有一个值
b.每一行都能区分
c.每一个表都不包含其他表已经包含的非主关键字信息
例如:帖子表中只能出现发帖人的id,而不能出现发帖人的id,同时还出现发帖人姓名,否则只要出现同一发帖人id的所有记录,他们中的姓名部分都保持严格一致,这就是数据冗余。
2.关系数据库与文件数据库的区别在哪?关系型数据库一般适用于哪些方面?
区别:
(1)关系型数据库的整体数据是结构化的,采用关系数据模型来描述。这是与文件系统的根本区别。
(2)关系型数据库系统的共享性高,冗余低可以面向整个系统,而文件系统具有应用范围的局限性,不易扩展。
(3)关系型数据库采用两级映射机制保证了数据的高独立性,从而使得程序的编写和数据都存在很高的独立性
两级映射:保证逻辑独立性的外模式/模式映射和保证物理独立性的内模式/模式映射
外模式:用户模式,是数据库用户的局部数据的逻辑结构特征的描述
模式:数据库全体数据的逻辑结构特征的描述
内模式:数据最终的物理存储结构的描述
(4)关系型数据库系统统一由DBMS进行管理从而为数据提供了如安全性保护、并发控制、完整性检查、数据库恢复服务。
3.什么是事务?有哪些特征?
事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为ACID(原子性、一致性、隔离性、持久性),只有这样才能称为一个事务。
特征说明:
原子性:事务必须是原子工作单元,对于其数据修改,要么全部执行,要么全部都不执行
一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保证所有数据完整性。事务结束时,所有内部数据结构都必须是正确的
隔离性:由并发事务所作的修改必须于任何其他并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它时候的状态,事务
不会查看中间状态的数据,这称为可串行性,因为它能够重新装在起始数据,并且重播一系列事务,以便数据结束时的状态与原始事务执行的状态相同。
持久性:事务完成之后,它对于系统的影响是持久性的
4.什么是事务的一致性?选择熟悉的数据库实现一个事务处理,如信用卡提款
事务的一致性:是事务原子性的体现,事务所应对的数据库操作要么成功要么失败没有第三种情况,事务不管提交成功与否都不能影响数据库数据的一致性状态
事务:用户定义的一个数据库操作序列,这些操作要么全部成功,要么全部不做,是一个不可分割的整体,定义事务的语句有BEGIN TRANSACTION、COMMIT、ROLLBACK
对于信用卡提款这一事务而言就是要保证‘提取到现金’和‘卡账号余额’的修改要同时成功或失败。
begin transaction
读取A的账户余额balance
balance=balance-amount转账金额
if(balance<0){
then rollback
}
else begin
将A的余额写回
读取B的账户余额balanceB
balanceB=balanceB+amount转账金额
将B的余额写回
commit
end if
end
5.触发器和存储过程概念
触发器:是存储在数据库中的过程,当表被修改时它隐式的被激发
存储过程:是数据库语言sql的集合,同样也存储在数据库中,但是它是由其他应用程序来启动运行或者也可以直接运行
6.触发器的作用和使用规范,触发器里是否可以有commit为什么?
触发器是可以有时事件来启动运行的,存在于数据库服务器中的一个过程。作用:可以实现一般的约束无法完成的复杂约束,从而实现更为复杂的完整性要求。使用触发器并不存在
严格的限定,只要用户想在无人工参与的情况下完成 一般的定义约束不可以完成的约束,来保证数据库完整性,那么就可以使用触发器
由于触发器的主要是用来保证数据库的完整性的,所以要创建一个触发器,首先要明确该触发器应该属于哪一种(DML、INSTEADOF、SYSTEM)因为他们各有各的用途;
其次就是要确定触发器被处罚以后所涉及到的数据。触发器中不可以使用commit.
7.实现索引的方式?索引的原理?索引的代价?索引的类型?
实现索引的方式有两种:针对一张表的某些字段创建具体的索引,如对orcale:create index 索引名称 on 表名(字段名);在创建表时为一段建立主键约束或者唯一约束
。系统将自动为其建立索引
索引的原理:根据建立索引的字段建立索引表,存放字段值以及对应记录的物理地址,从而在搜索的时候根据字段值搜索索引表的物理地址直接访问记录
引入索引虽然提高了查询速度,但是本省占一定的系统存储容量和 系统处理时间,需要更具具体的情况实际分析
(oracle)索引的类型有:B树索引、位图索引、函数索引等
8.view的概念,何时应用?
view是对表级数据的多角度的透视,适用于对查安全性、灵活性有一定要求的环境
9.使用存储过程访问数据库比直接用sql访问数据库有哪些优点?
存储过程是预编译的,执行时无需编译,执行速度更快;存储过程封装了一批sql语句,便于维护数据的完整性与一致性;可以实现代码复用
10数据库中回滚的概念,回滚段有什么作用?
回滚就是在事务提交之前将数据库恢复到事务修改之前数据库数据状态
回滚段就是为回滚提供依据,记录的是事务操作数据库之前的数据或者对应于以前操作的操作,这个内容要根据以前的操作而定,比如说以前事务操作如果是UPDATE,那么回滚段
那么存储的则是与之对应的UPDATE以前的数据,,如果是DELETE操作那么存储的则是与之对应的INSERT操作语句,相反如果事务操作的是INSERT语句,那么记录响应的则是
DELETE操作了
11.truncate和delete的区别:
1.truncate在各种表上无论是大小都非常快。如果有rollback命令delete将被撤销,而truncate则不会被撤销
2.truncate是一个DDL语言而delete是DML语句,向其他所有的DDL语言一样,它将被隐式提交,不能对truncate使用rollback命令
3.truncate将重新设置高水平线和所有的索引,在对整个表和索引进行浏览时,经过truncate操作后的表比delete操作后的表要快得多
4.truncate不能触发器触发,delete可以触发器触发
5.不能授予任何人清空他人表的权限
6.当表被清空后表和表的索引将重新设置为初始大小,而delete则不能
7.不能清空父表
12.union 和union all有什么不同?
13数据库分页语句
14.谈谈索引的用法及原理
索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据快,从而大大减少读取数据快的I/O次数,因此可以显著提高性能
15.绑定变量是什么?绑定变量有什么优缺点?
绑定变量是指在sql语句中使用变量,改变变量的值来改变sql语句的执行结果。
优点:使用绑定变量,可以减少sql语句的解析,减小数据库引擎消耗在sql语句解析的资源上。提高编程效率和可靠性。减少访问数据库的次数,就能实际上减少oracle的工作量
缺点:经常需要使用动态sql的写法,由于参数不同,可能sql执行效率不同
绑定变量时相对于文本变量来说的,所谓文本变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定执行
优点:减少硬解析,降低CPU的争用,节省shared pool
缺点:不能使用histogram,sql优化比较困难
16.使用索引查询一定可以提高查询的性能吗?为什么?
通常,使用索引查询数据要比全表扫描要快,但是我们也必须要注意到它的代价。索引需要空间来储存,也需要定期维护,每当有记录在表中递增或者索引列被修改时,索引本身也会被修改,
这就意味着每条记录的INSERTDELETE,UPDATE将为此多付出4,5次的磁盘I/O。因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢,
使用索引查询不一定能提高查询性能,索引范围查询适用于两种情况:
1.基于一个范围的检索,一般查询返回结果集小于表中记录的30%宜使用
2.基于非唯一性索引的检索,索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说明用错了索引或者讲是场合不同。
17.日志的作用是什么?
日志文件记录所有对数据库数据的修改,主要是保护数据库以防故障,以及恢复数据时使用。其特点如下:
1.每一个数据库至少包含两个日志文件组。每个日志文件组至少包含两个日志文件成员
2.日志文件组以循环方式进行写操作
3.每一个日志文件成员对应一个物理文件
4.记录数据库事务,最大限度的保证数据一致性和安全性
重做日志文件:含对数据库所作的更改记录,这样万一出现故障可以启用数据恢复,一个数据库至少需要两个重做日志文件
归档日志文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很有必要。
18简要介绍数据库表之间的连接类型及其特点?
连接类型可分为三种:内连接、外连接、交叉连接
内连接(inner join)使用比较运算符进行表间某列数据的比较操作并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。
外连接分为左外 连接、右外连接和全外连接三种,与内连接不同的是,外连接不止列出与连接条件相匹配的行,而是列出左表(当左外连接时)、右表(当右外连接时)或两张表(全外连接时)
中所有符合搜索条件的数据行。
交叉连接(cross join)没有where子句,它返回连接表中所有数据的笛卡尔积

原文地址:https://www.cnblogs.com/juddy/p/14142464.html