SQL Server数据库基础(二)

20. 您如何确保一个带有名为 Fld1 字段的 TableB 表格里只具有 Fld1 字段里的那些值,而这些值同时在名为 TableA 的表格的 Fld1 字段里?

第一个答案是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只允许有已经在另一表 格里的某个字段里定义了的值。通常是另外一个表格的主键。 另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护, 而且性能一般都很糟糕。

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

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

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

可以使用 Check 约束,它在数据库表格里定义,用来限制输入该列的值。 触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,可能会在 某些情况下影响到性能。 

23. 概述存储过程及其优缺点。 

存储过程是一个预编译的 sql 语句 ,编译后可多次使用 优势:响应时间上来说有优势,可以给我们带来运行效率提高的好处,且使用存储过程的系统更加稳定 缺点:维护性较差,相对于简单 sql,存储过程并没有什么优势,并且在进行调试时比较困难 

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

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

25. 什么是 SQL 注入式攻击? 

所谓 SQL 注入式攻击,就是攻击者把 SQL 命令插入到 Web 表单的输入域或页面请求的查询字符串,欺骗服务器执 行恶意的 SQL 命令。比如:攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。最后得到的 SQL 命令可 能变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。这时,已经不能真正验证用户 身份,所以系统会错误地授权给攻击者。 

26. 如何防范 SQL 注入式攻击? 

只要在利用表单输入的内容构造 SQL 命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方 式进行。

⑴ 对于动态构造 SQL 查询的场合,可以使用下面的技术: 

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改 SQL 命令的含义。 

第二:删除用户输入内容中的所有连字符。 

第三:对于用来执行查询的数据库帐户,限制其权限。

⑵ 用存储过程来执行所有的查询。 ⑶ 限制表单或查询字符串输入的长度。

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。

⑸ 将用户登录名称、密码等数据加密保存。 

⑹ 检查提取数据的查询所返回的记录数量。

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

1)master 数据库(主);

2)tempdb 数据库(临时);

3)model 数据库(模板);

4)msdb 数据库(计划任务); 

28. 默认创建一个数据库,会生成哪些文件? 

1)主文件(.mdf),

2)日志文件(.ldf),无次要文件(.ndf)。

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

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

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

索引覆盖(Index Covering)查询是指数据可以只通过索引获取,而不用接触表。 

31. 存储过程和触发器的区别? 

触发器与存储过程的主要区别在于触发器的运行方式。存储过程必须有用户、应用程序或者触发器来显示的调用并 执行,而触发器是当特定时间出现的时候,自动执行或者激活的,与连接用数据库中的用户、或者应用程序无关 

32. 存储过程和函数的区别? 

存储过程是用户定义的一系列 SQL 语句的集合,,而函数通常是数据库已定义的方法,具体区别如下: 1.对于存储过程来说可以返回参数,而函数只能返回值或者表对象. 2.函数必须有返回值,存储过程可有可无 3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一部分来调用.

33. 聚集索引和非聚集索引区别 

聚集索引,数据按索引顺序存储,中子结点存储真实的物理数据 非聚集索引,存储指向真正数据行的指针 

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

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

35. 数据库的优化 

1.创建适当的索引 

2.对 sql 语句优化 使用 exists 或 not exists 代替 in 或 not in 使用存储过程 用 union 替换 or(适用于索引列)

where 代替 having,having 检索完所有记录,才进行过滤 使用 select top 或 set rowcount 来限制操作的行 避免嵌套查询 对多个字段进行等值查询时,联合索引

36. 数据库的主从复制 

默认异步复制,容易造成主库数据和从库不一致 一个数据库为 Master,一个数据库为 slave,通过 Binlog 日志来实现 slave 两个线程,一个线程去读 master binlog 日志,写到自己的中继日志 一个线程解析日志,执行 sql master 启动一个线程,给 slave 传递 binlog 日志 半同步复制 只有把 master 发送的 binlog 日志写到 slave 的中继日志,这时主库才返回操作完成的反馈,性能有一

定降低 并行复制 slave 多个线程去请求 binlog 日志 

37. long_query 怎么解决 

设置参数,开启慢日志功能,得到耗时超过一定时间的 sql (1)slow_query_log 这句是开启记录慢查询功能,slow_query_log=0 关闭;slow_query_log=1 开启(这个 1 可以不写) (2)long_query_time = 1 这句是记录超过 1 秒的 SQL 执行语句 

38. varchar 和 char 的使用场景 

用来存储字符 varchar 适用字符长度经常变的 char 适用字符长度固定的 

39. 数据库连接池的作用 

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

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

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

41. 数据库三范式 

1NF 属性不可分 2NF 非主键属性,完全依赖于主键属性 3NF 非主键属性无传递依赖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值