Java面试题大全(数据库部分二)

6、如何提升数据查询的效率?

1.首先检查表的结构是否合理,因为采用多表查询的时候,看主外键的引用关系是否适当.如果不适当则重新设置表结构.如果是应用中的系统,则不需要更改表的字段,只更改主外键关系.如果数据库中有较多的数据,还应采用索引提高查询效率.

2.利用索引(index)对查询进行优化,index可以避免对表数据的全面扫描,当你以某个字段建立一个索引的时候,数据库就会生成一个索引页,索引页不单单保存索引的数据,还保存了索引在数据库的具体的物理地址,能够很快的定位查找到要找的记录

  1. 如果表的列很少,不适合建索引.表数据很少查询,而经常做insert、delete、update动作,不适合建所以。因为Oracle需要对索引额外维护。建立索引后,select会快, 当执行过多次的insert,delete,update后,会出现索引碎片,影响查询速度,我们应该对索引进行重组(即drop掉索引重新create)

4.索引的类型分为:
B-树索引:适合于大量的增、删、改,大多数数据的索引默认类型。
位图索引:适合于决策支持系统
HASH索引、分区索引等。

7、什么是数据库事务?

事务是作为一个逻辑单元执行的一系列操作,要么一起成功,要么一起失败。
一个逻辑工作单元必须有四个属性,称为 ACID(原子性、致性、隔离性和持久性)属性,只有这样才能成为一个事务。
原子性 :事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性 :事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性 :由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执的状态相同。
持久性 :事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

8、什么是数据库事务的隔离级别?

多个线程开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个线程在获取数据时的准确性。
数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)
Read committed:可避免脏读情况发生(读已提交)。
Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

9、如何删除表中的重复数据,只保留一条记录?

1.通过创建临时表
creat table tbl_tmp as select distinct * from tbl;
truncate table tbl;//清空表记录
insert into tbl select * from tbl_tmp;//将临时表中的数据插回来。

2.利用rowid
delete from tbl where rowid in
(select a.rowid from tbl a, tbl b
where a.rowid>b.rowid
and a.col1=b.col1 and a.col2 = b.col2)

3.利用max或min函数
delete from tbl a where rowid not in
(select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);
//这里max使用min也可以

delete from tbl where rowid not in
(select max(rowid) from tbl tgroup by t.col1, t.col2);

10、如何通过sql语句完成分页?

oracle

select rownum,bookId from
[rownum是伪列名,bookId是列名]
(select rownum row_id,bookId from xiaoWJ_books t)
t where row_id between 10 and 20
[查10到20条记录]

mysql

sql=”select * from xiaoWJ_books LIMIT ?,?”;
第一个?是开始位置,第二个?是每页显示多少

sqlServer2000

select top “+pageSize+” * from xiaoWJ_books where bookId not in
[去掉前面 “+pageBegin+” 条后显示 “+pageSize+” 条记录]
(select top “+pageBegin+” bookId from xiaoWJ_books order by bookId)
[查出整个表的前 “pageBegin” 条记录]
order by bookId”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值