面试题-数据库篇

删除一个数据库?
表A
(1)drop table A 删除表结构及数据
(2)delete from A where … 删除数据,但不释放空间,删除的表可以恢复,但删除过程慢
(3)truncate table A  清空数据,释放空间,不可恢复,删除快
删除表中完全重复的数据?数据库重复数据处理
使用临时表
select distinct *  into tempTable from A
truncate table A
select * into A from tempTable
drop tempTable
数据量过大时,处理方法?
(1)建立表索引,优化查询速度(2)使用Top优化查询(3)当表大于2G时使用表拆分法
1.合理的使用索引(例如在频繁作为条件的列,经常作为排序或分组的列) 
2.只查询必要的列,避免 * 3.避免或简化排序 4.使用存储过程 
5.使用dataReader读取数据 6.使用reapter控件显示 
SQL查询优化?
(1)select只返回需要的字段 (2)只在需要时使用order by (3)尽量避免使用in操作(4)尽量避免隐式的数据类型转换
避免隐式类型转换造成的全表扫描,在索引上使用函数也会造成全表扫描(因为索引只是为字段建立的,一旦使用表达式或者函数,那么索引就是失效了,当然也可以使用“函数索引”、
“表达式索引”解决这个问题),使用索引不一定能提高查询速度。
(5)避免在索引列上使用计算
(6)添加索引
数据库建立索引的优缺点?
优点:可以加快查询速度;缺点:数据插入过程会建索引,所以会降低数据的插入更新速度,而索引也会占数据库空间。
事务?脏数据?transaction
事务是数据库操作的一个并发控制单元,它控制一系列操作要么全部执行成功,要么全部不执行。有三个常用方法Begin(标记事务开始),Commit(提交事务),Rollback(回滚到begin前的状态)。常用于金融交易业务中,保证交易的安全性。
脏数据:事务T1修改→ 事务T2读数据→ 事务T1撤销了→ T2读到的就是"脏数据"
触发器?
触发器:通过数据的增删改事件进行触发而执行的一组sql语句。常见的有after(for)、instead of,用于insert、update、delete事件:
after(for)        表示执行代码后,执行触发器
instead of        表示执行代码前,用已经写好的触发器代替你的操作
例子://表bank只要执行insert操作就会执行delete操作,实际上是禁止用户插入数据的一个触发器
create trigger tr_insert on bank
for        
insert      
as
delete * from bank where cid=(select cid from inserted)

数据库设计三范式?
第一:无重复列
第二:表必须有主键
第三:表引用其他的表,必须通过主键关联

选出表中第31到40条记录?
select top 10 * from A where id not in (select top 30 id from A)

数据库锁?
锁是在多用户环境中对数据的访问的限制。SqlServer自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。

什么是索引,有什么优点?
索引象书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。

SQL Server 中char和varchar区别?
char 数据不足长度时后边补充空格;比如,你保存数据 xxx 到长度为10 的char型字段,结果取出的数据时长度10,后边有7个空格;varchar 数据是什么就存储什么;
char,nchar 有固的定长,查询速度快,但占用空间大,varchar,nvarchar,text没有固定定长,占用空间小,查询速度慢;

Oracle/Sql Server/DB2 类型转换函数? 
DB2:
char(*)  *可以是日期时间型、字符串、整数、十进制或双精度浮点数
varchar(*,50) 返回字符串、日期型、图形串的可变长度的字符串表示。
double(*)  float(*) int(*)  dec(*)    *必须是个数字
floor(*) 大于等于*的整数
Oracle:
TO_CHAR() 将nchar,nvarchar2,clob,nclob类型转换为char类型,或将数值/时间按照指定格式转换为varchar2类型
TO_DATE() 将char,nchar,varchar2,nvarchar2转换为日期类型,
TO_NUMBER(c[,fmt[,nls]]) 将char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式转换为数值类型并返回。 
SQL Server:
Cast()    Convert()

2000万条数据分页
分页控件  存储过程分页 一次只传回一页的值
原文地址:https://www.cnblogs.com/rwh871212/p/6961579.html