1. 什么是三范式?

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y

通俗地说:

首先要明确的是:满足着第三范式,那么就一定满足第二范式、满足着第二范式就一定满足第一范式

第一范式:字段是最小的单元不可再分;

学生信息组成学生信息表,有年龄、性别、学号等信息组成。这些字段都不可再分,所以它是满足第一范式的

第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而不是部分主键;

其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的

学号为1024的同学,姓名为Java3y,年龄是22岁。姓名和年龄字段都依赖着学号主键。

第三范式:满足第二范式,非主键外的所有字段必须互不依赖。

就是数据只在一个地方存储,不重复出现在多张表中,可以认为就是消除传递依赖比如,我们大学分了很多系(中文系、英语系、计算机系……),这个系别管理表信息有以下字段组成:系编号,系主任,系简介,系架构。那我们能不能在学生信息表添加系编号,系主任,系简介,系架构字段呢?不行的,因为这样就冗余了,非主键外的字段形成了依赖关系(依赖到学生信息表了)!正确的做法是:学生表就只能增加一个系编号字段。

2. 什么是存储过程及其优缺点?用什么来调用?

存储过程: 存储过程是一个预编译的SQL语句。

优点:

① .允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。

② .如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

缺点:

① . 每个数据库的存储过程语法几乎都不一样,十分难以维护(不通用)

② .业务逻辑放在数据库上,难以迭代

调用:

1) .可以用一个命令对象来调用存储过程。

2) .可以供外部程序调用,比如:java程序。

3. 什么是视图及其应用场景有哪些?

视图:视图是一种基于数据表的一种虚表;

① . 视图是一种虚表;

② . 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表;

③ . 向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句;

④ . 视图向用户提供基表数据的另一种表现形式;

⑤ . 视图没有存储真正的数据,真正的数据还是存储在基表中;

⑥ . 程序员虽然操作的是视图,但最终视图还会转成操作基表;

⑦ . 一个基表可以有0个或多个视图。

4. 视图的优缺点?

优点:

1) 对数据库的访问,因为视图可以有选择性的选取数据库里的一部分;

2) 用户通过简单的查询可以从复杂查询中得到结果;

3) 维护数据的独立性,试图可从多个表检索数据;

4) 对于相同的数据可产生不同的视图。

缺点:

查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么就无法更改数据。

5. 游标是什么?

游标:游标是指向查询结果集的一个指针,它是一个通过定义语句与一条select语句相关联的一组SQL语句。可以对查询出来的结果集作为一个单元来有效的处理。

游标包含两方面的内容:

1)游标结果集:执行其中的select语句所得到的结果集;

2)游标位置:一个指向游标结果集内的某一条记录的指针。

游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标却显得十分重要。

6. 数据库的锁机制

数据库的锁机制保证在一个事务释放锁之前,其他事务不可以进行修改。

悲观锁:事务每次操作之前假设有其他事务会修改需访问的数据,会要求上锁。

乐观锁:事务每次操作之前假设没有其他事务会修改需访问的数据,不会要求上锁。

共享锁:对某一资源加共享锁,自身可以读该资源,其他人也可以读该资源

共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享。

7. 数据库的乐观锁和悲观锁?

确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,乐观锁和悲观锁是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。

在查询完数据的时候就把事务锁起来,直到提交事务

实现方式:使用数据库中的锁机制

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

在修改数据的时候把事务锁起来,通过version的方式来进行锁定

实现方式:使用version版本或者时间戳。

8. Drop、delete和truncate区别

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE,DELETE,DROP 放在一起比较:

TRUNCATE TABLE :删除内容、释放空间但不删除定义。

DELETE TABLE: 删除内容不删除定义,不释放空间。

DROP TABLE :删除内容和定义,释放空间。

(1)、delete

1)、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

2)、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。

3)、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。

(2)、truncate

1)truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2)truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到min extents个extent,除非使用reuse storage。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。

3)对于外键(foreign key )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

4)truncate table不能用于参与了索引视图的表。

(3)、drop

1)、drop是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

2)、drop语句删除表结构及所有数据,并将表所占用的空间全部释放。

3)、drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态

9. 什么是事务?

事务(Transaction):事务是并发控制的基本单元,事务是一个操作序列,要么都执行,要么都不执行,他是一个不可分割的工作单位,事务是维护数据库一致性的单位。简单来说, 事务是一个Session中所进行所有的操作,要么同时成功,要么同时失败。

事务的4个属性:

1)原子性:要么都执行,要么都不执行。

2)一致性:合法的数据才可以被写入。

3)隔离性:允许多个用户并发访问。

4)持久性:事务结束后,事务处理的结果必须得到固化。即一旦提交,对数据库改变是永久的。

事务的语句:

1).开始事务:BEGIN TRANSACTION

2).提交事务:COMMIT TRANSACTION

3).回滚事务:ROLLBACK TRANSACTION

10. 事务的隔离级别(4种):

(1)未提交读(read uncommitted):读数据时不会检查使用任何锁。

(2)已提交读(read committed):只读取提交的数据并等待其他事务释放锁。

(3)可重复读(repeatable read):会保持共享锁到事务结束。

(4)可序列化(serializable):不仅会锁定影响的数据,还会锁定这个范围。

11. 数据库的4种日志:

(1)错误日志:Error Log.记录mysql运行过程ERROR,WARING等信息,系统出错或某条记录出问题可查看ERROR日志;

(2)日常运行日志:General query log记录mysql中每条请求数据;

(3)二进制日志:Binary log,包含一些事件,数据库的改动等;

(4)慢查询日志:slow query log,用于mysql的性能调优。

12. 超键、候选键、主键、外键分别是什么?

超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键(候选码):是最小超键,即没有冗余元素的超键。

主键(主码):数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

外键:在一个表中存在的另一个表的主键称此表的外键。

候选码和主码:

例子:邮寄地址(城市名,街道名,邮政编码,单位名,收件人)。

它有两个候选键:{城市名,街道名} 和 {街道名,邮政编码}。

如果我选取{城市名,街道名}作为唯一标识实体的属性,那么{城市名,街道名} 就是主码(主键)。

13. 主键和外键的区别?

主键在本表中是唯一的、不可唯空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键

14. SQL约束有哪几种?

(1)非空约束(NOT NULL): 用于控制字段的内容一定不能为空(NULL);

(2)唯一约束( UNIQUE): 控件字段内容不能重复,一个表允许有多个 Unique 约束;

(3)主键约束( PRIMARY KEY): 也是用于控件字段内容不能重复,但它在一个表只允许出现一个;

(4)外键约束( FOREIGN KEY): 用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一;

(5)检查约束(CHECK): 用于控制字段的值范围;

(6)默认值约束(DEFAULT)。

15. 数据库运行于哪种状态下可以防止数据的丢失?

在archive log mode(归档模式)只要其归档日志文件不丢失,就可以有效地防止数据丢失。

16. MySQL两种存储引擎的区别?以及各自的应用场景

Innodb引擎:提供了对数据库ACID事务的支持,并且实现了sql标准的四种隔离级别,事务安全的,支持行级锁,不支持全文索引。

MyIASM引擎:mysql的默认引擎,没有提供对数据库事务的支持,非事务安全的,锁的粒度是表级的,支持全文索引类型,相对简单性能优。

总结:

MYIASM管理非事务表,提供高速存储和检索,以及全文搜索能力,如果在应用中执行大量的select操作,应选择MYIASM引擎;

Innodb用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量的insert和update操作,应选择innodb引擎。

17. MyIASM和Innodb两种引擎所使用的索引的数据结构是什么?

都是B+树

MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。

Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

18. char和varchar的区别?

Char是一种固定长度的类型,varchar是一种可变长度的类型。

19. Mysql有关权限的表有哪几种?

(1).user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。

(2).db权限表:记录各个帐号在各个数据库上的操作权限。

(3).table_priv权限表:记录数据表级的操作权限。

(4).columns_priv权限表:记录数据列级的操作权限。

(5).host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。

20. 数据表损坏的修复方式有哪些?

(1)、使用 reapair table 或myisamchk 来修复。

(2)、如果上面的方法修复无效,采用备份恢复表。

使用 myisamchk 来修复的具体步骤:

1)修复前将mysql服务停止。

2)打开命令行方式,然后进入到mysql的/bin目录。

3)执行myisamchk –recover 数据库所在路径/*.MYI

21. Mysql和Oracle的区别

1)库函数不同;

2)Oracle是用表空间来管理的,Mysql不是;

3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同;

4)分页查询时候时候,mysql用limit ,oracle用rownum;

5)sql的语法的不同。

22. 常见的sql语句

1,说明:创建数据库

create database westos;

2,说明:删除数据库

drop database westos;

3,说明:查询user表中的Host,User,Password信息

select host,user,password from user;

4,说明:查询user表的数据结构

desc user;

5,说明:新建数据库westos中的表格

use westos;

create table linux(

username varchar(50) not null,

password varchar(50) noe null

);

6,说明:在linux表格中插入信息

insert into linux values(‘xyy’,‘123’);

7,说明:修改linux表格中的信息

update linux set password ‘456’ where username=‘xyy’;

8,说明:在linux表格中添加age字段

alter table linux add age varchar(4) after username;

9,说明:在linux表格中移除age字段

alter table linux drop age;

10,说明:修改表格名字

alter table linux rename haha;

11,说明:删除表格中的某一行

delete from haha where username=‘xyy’;

12,说明:删除表格

drop table haha;

23. 热备份和冷备份的区别?

热备份:热备份是在数据库运行的情况下,采用archive log mode(归档模式)方式来备份数据库的方法;

冷备份: 冷备份是发生在数据库正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将要害性文件拷贝到另一个位置的一种说法

24. 触发器的作用是什么?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

25. 索引是什么?有什么作用以及优缺点?

索引(index):

1).是一种快速查询表中内容的机制,类似于新华字典的目录,说白了 就是一种数据结构;

2).运用在表中某些个字段上,但存储时,独立于表之外。

优点:

1). 索引加快数据库的检索速度;

2). 唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

缺点:

1).索引需要占物理和数据空间;

2).索引降低了插入、删除、修改等维护任务的速度(虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引);

3).索引减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

26. 什么样的字段适合创建索引?

非空、唯一,经常被查询的字段。

27. 索引类型有哪些?索引失效条件

索引失效条件:

1).条件是or,如果还想让or条件生效,给or每个字段加个索引;

2).like查询,以%开头;

3).where中索引列使用了内部函数;

4).where中索引列有运算;

5).is null不会用,is not null 会用;

6).需要转换类型;

7). 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

28. 什么时候使用索引,什么时候不能使用索引

索引最大的好处是提高查询速度,缺点是更新数据时效率低,因为要同时更新索引对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。

29. B+索引和hash索引的区别

索引 区别
Hash 等值查询效率高,不能排序,不能进行范围查询
B+ 数据有序,可以进行范围查询

30. 索引的底层实现(B+树,为何不采用红黑树,B树)

区别
红黑树 增删操作时,红黑树会进行频繁的调整,浪费时间
B+树 相比较于B树和红黑树,显得更矮更宽,查询层次更浅
B树,也就是B-树 查询性能不稳定,查询结果高度不一致,每个节点保存指向真实数据的指针,相比B+树每一层存储的元素更多,显得高一点

31. B+树的实现

一个m阶的B+树具有如下几个特征:

(1)、有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

(2)、所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

(3)、所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

32. 为什么使用B+tree

索引查找过程中就要产生磁盘I/O消耗,主要与I/O次数和磁盘存取原理有关。

根据B-Tree的定义,可知检索一次最多需要访问h个节点。数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入局部性原理与磁盘预读

33. 列举几种表连接方式以及他们的区别?

内连接、自连接、外连接(左、右、全)、交叉连接

内连接:只有两个元素表相匹配的才能在结果集中显示。

外连接:左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。全外连接:连接的表中不匹配的数据全部会显示出来。

交叉连接(笛卡尔积):显示的结果是链接表数的乘积。

34. Union和union all有什么不同?

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。

UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。 从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

35. Oracle语句有哪些类型?

Oracle语句分三类:DDL、DML、DCL。

DDL(Data Definition Language)数据定义语言,包括: Create语句:可以创建数据库和数据库的一些对象。 Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。 Alter语句:修改数据表定义及属性。 Truncate语句:删除表中的所有记录,包括所有空间分配的记录被删除。

DML(Data Manipulation Language)数据操控语言,包括: Insert语句:向数据表张插入一条记录。 Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 Update语句:用于修改已存在表中的记录的内容。

DCL(Data Control Language)数据库控制语言,包括: Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。 Revoke语句:可以废除某用户或某组或所有用户访问权限

36. oracle从数据库中随机抽取50条数据

select * from (select * from t_example order by dbms_random.random) where rownum <= 50;

37. Order by与group by的区别?

order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

38. Commit在哪里会运用

oracle的commit就是DML语句提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。 执行commit从用户角度讲就是更新到物理文件了,事实上commit时还没有写date file,而是记录了redo log file,要从内存写到data物理文件,需要触发检查点,由DBWR这个后台进程来写,这里内容有点多的,如果不深究的话你就理解成commit即为从内存更新到物理文件。

39. 什么是PL/SQL?

PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。

40. 序列的作用

Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

41. 表和视图的关系

视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。表就是关系数据库中实际存储数据用的。

42. Oracle的基本数据类型有哪些?

1)字符串类型 char、nchar、varchar、varchar2、nvarchar2

2)数字类型 number、integer

3)浮点类型 binary_float、binary_double、float

4)日期类型 date、 timestamp

5)LOB类型 blob、clob、nclob、bfile

43. Oracle如何获取系统时间?

select to_char(sysdate, &#39;yyyy-MM-dd HH24:mi:ss&#39;) from dual

44. Oracle怎么去重?

使用distinct关键字。

45. 什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了

46. 如何维护数据库的完整性和一致性?

尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

47. 对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?

对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。

48. 可以用什么来确保表格里的字段只接受特定范围里的值?

Check限制,它在数据库表格里被定义,用来限制输入该列的值。 触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。

49. 什么是相关子查询?如何使用这些查询?

经验更加丰富的开发人员将能够准确地描述这种类型的查询。

相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。

50. 如何优化数据库,如何提高数据库的性能?

1)给数据库做索引,合理的索引能立即显著地提高数据库整个系统的性能。

2)在适当的情况下,尽可能的用存储过程而不是SQL查询。因为前者已经过了预编译,运行速度更快。

3)优化查询语句,通过高性能的查询语句提高数据库的性能。

51. 事前触发和事后触发有何区别?语句级触发和行级触发有何区别?

事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

52. 数据库设计的必要性及设计步骤

好的数据库结构有利于:节省数据的存储空间,能够保证数据的完整性,方便进行数据库应用系统的开发。设计不好的数据库结构将导致:数据冗余、存储空间浪费和内存空间浪费;

不管数据库的大小和复杂程度如何,可以用下列基本步骤来设计数据库:收集信息–标识对象–设计数据模型–标识每个对象–存储的信息类型–标识对象之间的关系

53. 什么是数据模型?什么是规范化?

数据模型:数据模型是一种标识实体类型及其实体间联系的模型。典型的数据模型有网状模型、层次模型和关系模型。

规范化:从关系数据库的表中,除去冗余数据的过程称为规范化。包括:精简数据库的结构,从表中删除冗余的列,标识所有依赖于其它数据的数据

54. 数据库的主从复制

主从复制(同步)使得修改的数据可以从一个数据库服务器复制到其他数据库服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。只要主数据库的二进制日志数据发生变化,从服务器就会复制数据。

55. 数据库连接池的作用

(1).维护一定数量的连接,减少创建连接的时间;

(2).更快的响应时间;

(3).统一的管理。

56. 分库分表,主从复制,读写分离

读写分离,读从库,写主库;

spring配置两个数据库,通过AOP(面向切面编程),在写或读方法前面进行判断得到动态切换数据源。

57. 关系型数据库和非关系型数据库的区别

关系型数据库

优点:

① 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;

② 使用方便:通用的SQL语言使得操作关系型数据库非常方便;

③ 易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;

④ 支持SQL,可用于复杂的查询。

⑤ 支持事务

缺点:

① 为了维护一致性所付出的巨大代价就是其读写性能比较差;

② 固定的表结构;

③ 不支持高并发读写需求;

④ 不支持海量数据的高效率读写。

非关系型数据库

① 使用键值对存储数据;

② 分布式;

优点:

① 无需经过sql层的解析,读写性能很高

② 基于键值对,数据没有耦合性,容易扩展

③ 存储数据的格式:nosql的存储格式是key,value形式

缺点:

不提供sql支持

58. Long_query怎么解决

设置参数,开启慢日志功能,得到耗时超过一定时间的sql

59. 死锁怎么解决

找到进程号,kill进程。

60. 最左匹配原则

最左匹配原则是针对索引的

举例来说:两个字段(name,age)建立联合索引,如果where age=12这样的话,是没有利用到索引的,这里我们可以简单的理解为先是对name字段的值排序,然后对age的数据排序,如果直接查age的话,这时就没有利用到索引了,查询条件where name=‘xxx’ and age=xx 这时的话,就利用到索引了,再来思考下where age=xx and name=’xxx‘ 这个sql会利用索引吗,按照正常的原则来讲是不会利用到的,但是优化器会进行优化,把位置交换下。这个sql也能利用到索引了。

数据库面试题汇总(60题)相关推荐

  1. 2020字节跳动数据库面试题及答案(二)—— NoSQL部分

    本文答案整理为原创,转载请说明出处 文章目录 redis 的底层数据结构有哪些 redis 中的 SDS 和 C 语言中的字符串有什么区别,优点是什么 redis 中的字典是如何实现的,如何解决冲突和 ...

  2. SQL编程软件测试,编程程题库之软件测试8大常见数据库面试题

    原标题:编程程题库之软件测试8大常见数据库面试题 一.事务的四大特性 原子性,要么执行,要么不执行 隔离性,所有操作全部执行完以前其它会话不能看到过程一致性,事务前后,数据总额一致持久性,一旦事务提交 ...

  3. mysql纵表 主键_数据库面试题-sql语句

    原标题:数据库面试题-sql语句 1,写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的. 答: → 解1: select top ...

  4. MySQL数据库面试题(2021最新版)

    文章目录:http://github.crmeb.net/u/defu 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 ...

  5. Oracle数据库面试题 精选 Oracle 面试题

    Oracle数据库面试题 1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法.适用于所有模式的数据库. 优点 1. 是非常快速 ...

  6. 混合索引_数据库面试题:查询在什么情况下不?索引-数据库知识点

    查询在什么情况下不⾛索引 数据库面试题 ⾸先,我们可以说通过explain去排查⼀个慢查询,进⽽找到它的索引(参看第五题),当创建索引却不⾛索引时,我们就需要考虑到优化器的问题. 在⼀条单表查询语句真 ...

  7. datagrid如何获取一行数据中的某个字段值_或许是全网最全面关于数据库面试题...

    原文: https://www.enmotech.com/web/detail/1/794/1.html 两万字全面论述数据库面试题(上) https://www.enmotech.com/web/d ...

  8. 计网/数据库面试题(更新中ing~~)

    计网/数据库面试题(更新中ing~~) <计算机网络> 1. OSI七层模型.设备 (传输层)协议的多路分用和复用 2. TCP/IP四层模型==五层模型 (传输层)TCP和UDP协议对比 ...

  9. 常见大数据面试题汇总带答案

    大数据面试题汇总 **牛客网刷sql题** redis flume flink(大部分知识点写过的帖子里都有) mr,java ,集群 算法题 kafka 维度建模分为哪几种? SQL高频面试题 hb ...

最新文章

  1. UITableView嵌套WKWebView的那些坑
  2. Webcast 系列课程 NET最全,最权威的学习资源
  3. 统一异常处理+错误编码设计方案
  4. T-SQL备忘(2):聚合函数运算和NULL
  5. 新华三助力公安构建新IT“警盾”
  6. Android开发笔记(六十九)JNI实战
  7. 通​过​C​a​c​t​i​监​控​w​i​n​d​o​w​s​资​源
  8. 非计算机专业计算机教学考试,论非计算机专业的计算机教学与等级考试
  9. XCode9 拖入文件 不自动添加 compile sources
  10. Notepad++编译Verilog代码(精简)
  11. BMP390高精度压力传感器数据读取与处理(基于STM32)
  12. h3cminia51使用手册_关于H3C mini A51的管理IP问题?
  13. 频数直方图的步骤_《频数直方图》PPT课件
  14. DebugView使用方法
  15. 华为智慧屏x1是鸿蒙系统吗,荣耀智慧屏x1和华为智慧屏s55有什么区别?哪个值得买...
  16. win10系统显示打印机未连接到服务器,解决win10提示“Windows无法连接到打印机”的方法...
  17. 51nod 1693 水群(思维,最短路,spfa)
  18. 火影推荐程序连载14-Vue开源项目使用探索
  19. 【牛客网】埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 题解
  20. 【剑指Offer】个人学习笔记_46_把数字翻译成字符串

热门文章

  1. 自动化读研转计算机可以吗,自动化转计算机?你可以选择这个专业!
  2. 史上最全虚拟机安装、安装系统、玩游戏、多开游戏
  3. 6000字 “保姆级” 教程 | 讲述Pandas库的数据读取、数据获取、数据拼接、数据写出!
  4. Unity 搭建ILRuntime开发环境
  5. 关于FPGA设计中的线性序列机和状态机
  6. swiper+vue3 水平带左右箭头切换
  7. 知乎热议!2021大厂AI Lab现状盘点,网友:名存实亡
  8. LGD扩产OLED面板可能错过了最佳时机
  9. 简体字转繁体字------- 如何将简体字文章翻译成繁体字,并加上拼音 python
  10. 云计算的三种服务模式:IaaS、PaaS和SaaS