软件测试必备之数据库知识(三)

官方账号 2019-04-2809:25:04经验总结2589阅读模式

21、索引对数据库性能如此重要,应该如何使用它?文章源自玩技e族-https://www.playezu.com/17398.html

数据库选择正确的索引是一项复杂的任务。如果索引列较少,则需要的磁盘空间和维护开销 都较少。如果在一个大表上创建了多种组合索引,索引文件也会膨胀很快。而另一方面,索引较多 可覆盖更多的查询可能需要试验若干不同的设计,才能找到最有效的索引。可以添加、修改和删 除索引而不影响数据库架构或应用程序设计。因此,应尝试多个不同的索引从而建立最优的索引。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

22、尽量使用短索引。文章源自玩技e族-https://www.playezu.com/17398.html

对字符串类型的字段进行索引,如果可能应该指定一个前缀长度。例如,如果有一个 CHAR(255)的列,如果在前10个或30个字符内,多数值是惟一的,则不需要对整个列进行索引。 短索引不仅可以提高查询速度而且可以节省磁盘空间、减少I/O操作。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

23、MySQL存储过程和函数有什么区别?文章源自玩技e族-https://www.playezu.com/17398.html

在本质上它们都是存储程序。函数只能通过return语句返回单个值或者表对象;而存储过程 不允许执行return,但是可以通过out参数返回多个值。函数限制比较多,不能用临时表,只能用表变量,还有一些函数都不可用等等;而存储过程的限制相对就比较少。函数可以嵌入在SQL 语句中使用,可以在SELECT语句中作为查询语句的一个部分调用;而存储过程一般是作为一个独立的部分来执行。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

24、存储过程中的代码可以改变吗?文章源自玩技e族-https://www.playezu.com/17398.html

目前,MySQL还不提供对已存在的存储过程代码的修改,如果必须要修改存储过程,必须使用DROP语句删除之后,再重新编写代码,或者创建一个新的存储过程。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

25、存储过程中可以调用其他存储过程吗?文章源自玩技e族-https://www.playezu.com/17398.html

存储过程包含用户定义的SQL语句集合,可以使用CALL语句调用存储过程,当然在存储 过程中也可以使用CALL语句调用其他存储过程,但是不能使用DROP语句删除其他存储过程。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

26、存储过程的参数不要与数据表中的字段名相同。文章源自玩技e族-https://www.playezu.com/17398.html

在定义存储过程参数列表时,应注意把参数名与数据库表中的字段名区别开来,否则将出 现无法预期的结果。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

27、存储过程的参数可以使用中文吗?文章源自玩技e族-https://www.playezu.com/17398.html

一般情况下,可能会出现存储过程中传入中文参数的情况,例如某个存储过程根据用户的 名字查找该用户的信息,传入的参数值可能是中文。这时需要在定义存储过程的时候,在后面加 上character set gbk,不然调用存储过程使用中文参数会出错,比如定义userInfo存储过程,代码 如下:文章源自玩技e族-https://www.playezu.com/17398.html

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

28、MySQL中视图和表的区别以及联系是什么?文章源自玩技e族-https://www.playezu.com/17398.html

两者的区别:文章源自玩技e族-https://www.playezu.com/17398.html

(1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。文章源自玩技e族-https://www.playezu.com/17398.html

(2)视图没有实际的物理记录,而基本表有。文章源自玩技e族-https://www.playezu.com/17398.html

(3)表是内容,视图是窗口。文章源自玩技e族-https://www.playezu.com/17398.html

(4)表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它 进行修改,但视图只能用创建的语句来修改。文章源自玩技e族-https://www.playezu.com/17398.html

(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL 语句的集合。安全的角度来说,视图可以防止用户接触数据表,因而用户不知道表结构。文章源自玩技e族-https://www.playezu.com/17398.html

(6)表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。文章源自玩技e族-https://www.playezu.com/17398.html

(7)视图的建立和删除只影响视图本身,不影响对应的基本表。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

两者的联系:文章源自玩技e族-https://www.playezu.com/17398.html

视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有记录) 都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本 表。视图是基本表的抽象和在逻辑意义上建立的新关系。文章源自玩技e族-https://www.playezu.com/17398.html

29、使用触发器时须特别注意。文章源自玩技e族-https://www.playezu.com/17398.html

在使用触发器的时候需要注意,对于相同的表,相同的事件只能创建一个触发器,比如对 表account创建了一个BEFORE INSERT触发器,那么如果对表account再次创建一个BEFORE INSERT触发器,MySQL将会报错,此时,只可以在表account上创建AFTER INSERT或者 BEFORE UPDATE类型的触发器。灵活的运用触发器将为操作省去很多麻烦。文章源自玩技e族-https://www.playezu.com/17398.html

 文章源自玩技e族-https://www.playezu.com/17398.html

30、及时删除不再需要的触发器。文章源自玩技e族-https://www.playezu.com/17398.html

触发器定义之后,每次执行触发事件,都会激活触发器并执行触发器中的语句。如果需求 发生变化,而触发器没有进行相应的改变或者删除,则触发器仍然会执行旧的语句,从而会影响 新的数据的完整性。因此,要将不再使用的触发器及时删除。文章源自玩技e族-https://www.playezu.com/17398.html

文章源自玩技e族-https://www.playezu.com/17398.html
注意:本文法律责任由该文章作者承担,侵权请联系2523030730▷诈骗举报◁▷新闻不符◁▷我要投稿◁
  • 我们QQ群
  • QQ扫一扫
  • weinxin
  • 微信公众号
  • 公众号扫一扫
  • weinxin
评论:2   其中:访客  2   博主  0
    • 今日头条新闻
      今日头条新闻 1 来自天朝的朋友 谷歌浏览器 Windows 7 广西贺州市 联通

      文章不错支持一下,非常喜欢

    匿名

    发表评论

    匿名网友

    确定