• 面试题-数据库篇


    删除一个数据库?
    表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万条数据分页
    分页控件  存储过程分页 一次只传回一页的值
  • 相关阅读:
    python -基础-强大的列表推导式
    python-基础-字符串拼接
    tkinter学习-- 控件一、Label、Button
    python -re模块
    Apache POI XWPF 爬坑指南之二特定位置插入表格、段落、图片
    mybatis报错:Invalid bound statement (not found):
    bootstrap中input输入框后面添加图标
    bootstrap悬浮显示内容
    layui中使用laydate
    与SQL相关解释表关联(left join ... on ... and ...)
  • 原文地址:https://www.cnblogs.com/rwh871212/p/6961579.html
Copyright © 2020-2023  润新知