记录数据库面试题及答案21~41

不断更新中

21. 如何防范SQL注入式攻击

一, 不使用动态SQL拼接
二, 利用在表单输入的内容构造SQL命令之前,把所有输入内容过滤一番

对于动态构造SQL的场合时

  1. 替代单引号,把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义.
  2. 删除用户输入内容中所有的连字符.
  3. 对于用来执行查询的数据库账户,限制其权限,用不同的用户账户执行语句操作.
  4. 用存储过程来执行所有的查询
  5. 限制输入的字符串长度
  6. 检查用户输入合法性,确保用户输入内容只包含合法的数据
  7. 对用户登录名称和密码加密保存
  8. 检查提取数据的查询所返回的记录数量

22. 默认的系统数据库有哪些

  1. master(主) : 是SQL Server中最重要的一个数据库,记录系统中所有的信息
  2. tempdb(临时) : 存在SQL Server会话期间临时性的数据库
  3. model(模板) : 是模板库,建立数据库的一些模板
  4. msdb(计划任务): 提供SQL Server中所有的代理服务

23. 默认创建一个数据库,会生成那些文件

  1. 主文件(.mdf)
  2. 日志文件(.ldf)
  3. 次要文件(.ndf)

24. 创建数据库时,能不能把数据文件和日志文件分开

可以分开,起到优化作用,把数据库文件放到高速读写区,把日志文件放到低速读写区

25. 什么是索引覆盖(Index Covering)查询?

是指数据可以通过索引获取,而不用接触表.
比如: 非聚集复合索引: 建立索引字段时正好覆盖了条件查询中所涉及到的字段

26.存储过程和函数的区别

  1. 存储过程可以有返回参数,函数只能返回值或者表对象
  2. 函数必须有返回值,存储对象可有可无
  3. 存储过程一般作为一个独立的部分来执行,而函数可以作为查询语句的一部分来调用

27. 聚集索引和非聚集索引的区别

根本区别: 表中记录的排列顺序和索引的排列顺序是否一致

28.索引的优缺点,什么时候使用索引,什么时候不能使用索引

优点: 提高查询速度
缺点: 更新数据时效率低,应为要同时更新索引
对数据进行频繁查询建立索引,频繁更新时不建议使用索引

29. 数据库优化

  1. SQL尽量使用索引
  2. 对SQL语句进行优化
    - 子查询变成 left join
    - limit分布优化,先利用ID定位,再分页
    - or 条件优化,多个or条件可以用union all对结果进行合并
    - 不必要的排序
    - where代替having ,having检索完所有记录,再进行过滤
    - 避免嵌套查询
    - 对多个字段进行等值查询时,联合索引

30. 索引分类索引失效条件

  1. 普通索引: 最基本索引,没有任何限制
  2. 唯一索引: 与普通索引类似,不同的是,索引列的值必须唯一,但允许有空值
  3. 主键索引: 特殊的唯一索引,不允许有空值
  4. 全文索引: 针对较大数据,生成全文索引耗时间,好空间
  5. 组合索引: 为了更多的提高mysql效率可建立组合索引,遵循"最左前缀"原则
    失效条件
  6. 条件是or,如果想条件生效,给or每个字段加索引
  7. like查询,以%开头
  8. 内部函数
  9. 对索引类进行计算

31. 数据库的主从复制

1.默认异步复制
容易造成主库数据与从库数据不一样
通过binlog日志实现,数据库1两个线程,一个读取数据库2的binlog日志,一个解析日志执行sql
数据库2启动一个线程,给数据库1传递日志

2.半同步复制
只有把数据库1的发送的binlog日志写道数据库2的中继日志,这时主库才返回操作完成反馈,性能有一定降低
3.并行复制
数据库2多个线程去请求binlog日志

32. long query怎么解决

是指设置数据库日志,记录记录耗时耗时过长的sql语句
设置参数,开启慢日志功能,得到耗时超过一定时间的sql
slow query log开启记录慢查询功能,slow query log=0关闭
slow query log=1开启,1可不写
slow query time=1,这句记录超过一秒

33. varcher 和 char的使用场景

储存字符
varder适合字符长度经常变的
char适合字符长的固定的

34. 数据库连接池的作用

维护一定数据的连接,减少创建连接的时间
更快的响应时间
统一的管理

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

读写分离,读从库,写主库
spring可以配置两个数据库,通过TOP(面向切面编程)在写和读方法前面进行判断得到动态切换数据源
实现读写分离

36. 数据库三范式

范式:符合某一种级别的关系模型的集合
1NF 属性不可分: 通俗理解即一个字段只存储一项信息
2NF 非主键属性,完全依赖主键属性: 要求数据库表中的每个实例或行必须可以被惟一地区分。
3NF 非主键属性无传递依赖: 要求一个数据库表中不包含已在其它表中已包含的非主键字段

37. 数据库中的join的inner join,outer join,coors join

以AB两张表为例
在这里插入图片描述
cross join:交叉连接,得到的结果是两个表的乘积,即笛卡尔积

38. 有哪些锁,selete时怎么加排它锁

  1. 乐观锁: 乐观锁不锁任何东西,他不依赖数据库事务机制,完全是应用系统层面的东西
  2. 悲观锁: 是指假设并发更新冲突会发生, 所以不管冲突是否发生都会使用锁机制
  3. 排它锁: 可以防止并发事务对资源进行访问
  4. 共享锁: 允许并发事务在封闭式并发控制下读取资源
  5. 更新锁:是共享锁和排它锁的集合,
  6. 表锁:锁住整个表可同时读,写不行
  7. 行级锁:单独一行记录加锁
    在语句中加入for update是给相应行增加排它锁.Selete出来的数据别的事务不能读取,不能修改,不能删除

39. 死锁怎么解决

找到进程号,kill 进程
产生死锁的原因:
1.系统提供的资源数量有限,不能满足每个进程的使用,
2.多道程序运行时,推进程序不合理
产生死锁的必要条件
1.互斥条件
2.不可不多条件(不可占条件)
3.部分分配
4.循环等待
根据死锁的四个必要条件,只要使其中一不成立 ,死锁就不会出现,可采取三种 预防措施
1.采用资源动态分配策略
2.允许进程剥夺使用其他进程占有的资源,从而破坏" 不可剥夺 "条件
3.采用资源有序分配法,破坏 “环路” 条件

40. 最左匹配原则

最左匹配原则是针对索引的
两个字段(name,age)建立联合索引,如果where age=12 这样的话,是没有利用到索引的.
如果where name= ‘XXX’ and age=12,这时就利用到索引,
因为创建复合索引的规则是首先对复合索引的最左边的字段先排序,然后在对后边的第二个字段排序.

41. SQLServer 是一种大型数据库,他的储存容量只受储存介质的限制,请问他是通过什么方式实现这种无线容量机制的

他的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQLServer的存储容量是可以扩大的
SQLServer 数据库有三种类型文件
主要数据库文件
主要数据文件是数据库的起点,指向数据库中文件的其他部分,每个数据库都有一个主要数据文件主要数据文件推荐文件扩展名是.mdf
次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件,有些数据库可能没有次要数据文件,而有些数据库则需要多个次要数据文件扩展名为.ndf
日志文件
日志文件包含恢复数据库所需的所有日志文件,每个数据库至少有一个日志文件,但可以不止一个扩展名为.ldf

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值