加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

告诉你38个MySQL数据库的小技巧!

发布时间:2018-09-09 17:19:03 所属栏目:编程 来源:回首笑人间
导读:9月15日技术沙龙 | 与东华软件、AWS、京东金融、饿了么四位大咖探讨精准运维! 无论是运维、开发、测试,还是架构师,数据库技术是一个必备加薪神器,那么,一直说学习数据库、学MySQL,到底是要学习它的哪些东西呢? 1、如何快速掌握MySQL? 培养兴趣 兴趣

查询结果中,如果需要对列进行降序排序,可以使用DESC,这个关键字只能对其前面的列 进行降序排列。例如,要对多列都进行降序排序,必须要在每一列的列名后面加DESC关键字。 而DISTINCT不同,DISTINCT不能部分使用。换句话说,DISTINCT关键字应用于所有列而不 仅是它后面的第一个指定列。例如,查询3个字段s_id,f_name,f_price,如果不同记录的这3个字段的组合值都不同,则所有记录都会被查询出来。

17、ORDER BY可以和LIMIT混合使用吗?

在使用ORDER BY子句时,应保证其位于FROM子句之后,如果使用LIMIT,则必须位 于ORDER BY之后,如果子句顺序不正确,MySQL将产生错误消息。

18、什么时候使用引号?

在查询的时候,会看到在WHERE子句中使用条件,有的值加上了单引号,而有的值未加。 单引号用来限定字符串,如果将值与字符串类型列进行比较,则需要限定引号;而用来与数值进 行比较则不需要用引号。

19、在WHERE子句中必须使用圆括号吗?

任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确操作顺序。 如果条件较多,即使能确定计算次序,默认的计算次序也可能会使SQL语句不易理解,因此使 用括号明确操作符的次序,是一个好的习惯。

20、更新或者删除表时必须指定WHERE子句吗?

在前面章节中可以看到,所有的UPDATE和DELETE语句全都在WHERE子句中指定了条 件。如果省略WHERE子句,则UPDATE或DELETE将被应用到表中所有的行。因此,除非 确实打算更新或者删除所有记录,否则要注意使用不带WHERE子句的UPDATE或DELETE 语句。建议在对表进行更新和删除操作之前,使用SELECT语句确认需要删除的记录,以免造 成无法挽回的结果。

21、索引对数据库性能如此重要,应该如何使用它?

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

22、尽量使用短索引。

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

23、MySQL存储过程和函数有什么区别?

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

24、存储过程中的代码可以改变吗?

目前,MySQL还不提供对已存在的存储过程代码的修改,如果必须要修改存储过程,必须使用DROP语句删除之后,再重新编写代码,或者创建一个新的存储过程。

25、存储过程中可以调用其他存储过程吗?

存储过程包含用户定义的SQL语句集合,可以使用CALL语句调用存储过程,当然在存储 过程中也可以使用CALL语句调用其他存储过程,但是不能使用DROP语句删除其他存储过程。

26、存储过程的参数不要与数据表中的字段名相同。

在定义存储过程参数列表时,应注意把参数名与数据库表中的字段名区别开来,否则将出 现无法预期的结果。

27、存储过程的参数可以使用中文吗?

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

CREATE PROCEDURE useInfo(IN u_name VARCHAR(50) character set gbk, OUT u_age INT)

28、MySQL中视图和表的区别以及联系是什么?

两者的区别:

(1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。

(2)视图没有实际的物理记录,而基本表有。

(3)表是内容,视图是窗口。

(4)表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它 进行修改,但视图只能用创建的语句来修改。

(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL 语句的集合。从安全的角度来说,视图可以防止用户接触数据表,因而用户不知道表结构。

(6)表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

(7)视图的建立和删除只影响视图本身,不影响对应的基本表。

两者的联系:

视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有记录) 都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本 表。视图是基本表的抽象和在逻辑意义上建立的新关系。

29、使用触发器时须特别注意。

在使用触发器的时候需要注意,对于相同的表,相同的事件只能创建一个触发器,比如对 表account创建了一个BEFORE INSERT触发器,那么如果对表account再次创建一个BEFORE INSERT触发器,MySQL将会报错,此时,只可以在表account上创建AFTER INSERT或者 BEFORE UPDATE类型的触发器。灵活的运用触发器将为操作省去很多麻烦。

30、及时删除不再需要的触发器。

触发器定义之后,每次执行触发事件,都会激活触发器并执行触发器中的语句。如果需求 发生变化,而触发器没有进行相应的改变或者删除,则触发器仍然会执行旧的语句,从而会影响 新的数据的完整性。因此,要将不再使用的触发器及时删除。

31、应该使用哪种方法创建用户?

创建用户有几种方法:GRANT语句、CREATE USER语句和直接操作user表。一般情况, 最好使用GRANT或者CREATE USER语句,而不要直接将用户信息插入user表,因为user表中存储了全局级别的权限以及其他的账户信息,如果意外破坏了 user表中的记录,则可能会对 MySQL服务器造成很大影响。

32、mysqldump备份的文件只能在MySQL中使用吗?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读