登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 1708|回复: 0

关系型数据库MySQL你不知道的28个小本领

[复制链接]

164

主题

164

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2019-3-19 07:08:42 | 显示全部楼层 |阅读模式 来自 福建
baYa77A6IyYVKnIj.jpg
zpn2A0ezA3NHHm0e.jpg



作者 l 回顾笑人间
泉源:http://www.cnblogs.com/Survivalist
无论是运维、开辟、测试,照旧架构师,数据库技能是一个必备加薪神器,那么,不停说学习数据库、学 MySQL,到底是要学习它的哪些东西呢?

0、怎样快速把握 MySQL?

造就爱好
爱好是最好的老师,岂论学习什么知识,爱好都可以极大地进步学习服从。固然学习 MySQL5.6 也不破例。

夯实底子
盘算机范畴的技能非常夸大底子,刚开始学习大概还熟悉不到这一点,随着技能应用的深 入,只有有着踏实的底子功底,才气在技能的门路上走得更快、更远。对于 MySQL 的学习来说, SQL 语句是此中最为底子的部门,许多操纵都是通过 SQL 语句来实现的。以是在学习的过程中, 读者要多编写 SQL 语句,对于同一个功能,利用差别的实现语句来完成,从而深刻明白其差别之处。

实时学习新知识
精确、有用地使用搜刮引擎,可以搜刮到许多关于 MySQL5.6 的相干知识。同时,参考别 人办理题目的思绪,也可以汲取别人的履历,实时获取最新的技能资料。

多实践操纵
数据库体系具有极强的操纵性,必要多动手上机操纵。在现实操纵的过程中才气发现题目, 并思索办理题目的方法和思绪,只有如许才气进步实战的操纵本领。

1、MySQL中怎样利用特别字符?

诸如单引号(’),双引号("),反斜线()等符号,这些符号在 MySQL 中不能直接输入 利用,否则会产买卖料之外的效果。在MySQL中,这些特别字符称为转义字符,在输入时必要 以反斜线符号(’’)开头,以是在利用单引号和双引号时应分别输入(’)大概("),输入反 斜线时应该输入(),其他特别字符另有回车符(),换行符(),制表符(        ab ),退格 符()等。在向数据库中插入这些特别字符时,肯定要举行转义处置惩罚。
2、MySQL中可以存储文件吗?

MySQL 中的 BLOB 和 TEXT 字段范例可以存储数据量较大的文件,可以利用这些数据范例 存储图像、声音大概是大容量的文本内容,比方网页大概文档。固然利用 BLOB 大概 TEXT 可 以存储大容量的数据,但是对这些字段的处置惩罚会低落数据库的性能。假如并非须要,可以选择只 储存文件的路径。
3、MySQL中怎样实行区分巨细写的字符串比力?

在 Windows 平台下,MySQL 是不区分巨细的,因此字符串比力函数也不区分巨细写。假如 想实行区分巨细写的比力,可以在字符串前面添加 BINARY 关键字。比方默认环境下,’a’=‘A’ 返回效果为 1,假如利用 BINARY 关键字,BINARY’a’=‘A’ 效果为 0,在区分巨细写的环境下,’a’  与 ’A’ 并不雷同。
4、怎样从日期时间值中获取年、月、日等部门日期或时间值?

MySQL 中,日期时间值以字符串情势存储在数据表中,因此可以利用字符串函数分别截取日期时间值的差别部门,比方某个名称为 dt 的字段有值 “2010-10-01 12:00:30”,假如只必要获 得年值,可以输入 LEFT(dt, 4),如许就得到了字符串左边开始长度为 4 的子字符串,即 YEAR 部门的值;假如要获取月份值,可以输入 MID(dt,6,2),字符串第 6 个字符开始,长度为 2 的子字符串恰好为 dt 中的月份值。同理,读者可以根据其他日期和时间的位置,盘算并获取相应的值。
5、怎样改变默认的字符集?

CONVERT() 函数改变指定字符串的默认字符集,在开始的章节中,向读者先容利用 GUI 图形化安装设置工具举行 MySQL 的安装和设置,此中的一个步调是可以选择 MySQL 的默认字符集。但是,假如只改变字符集,没有须要把设置过程重新实行一遍,在这里,一个简朴的方式是 修改设置文件。在 Windows 中,MySQL 设置文件名称为 my.ini,该文件在 MySQL 的安装目次下面。修改设置文件中的 default-character-set 和 character-set-server 参数值,将其改为想要的字 符集名称,如 gbk、gb2312、latinl 等,修改完之后重新启动 MySQL 服务,即可见效。读者可以在修改字符集时利用 SHOW VARIABLES LIKE ’character_set_°%’; 下令检察当前字符集,以举行对比。
6、DISTINCT 可以应用于全部的列吗?

查询效果中,假如必要对列举行降序排序,可以利用 DESC,这个关键字只能对其前面的列 举行降序分列。比方,要对多列都举行降序排序,必须要在每一列的列名背面加 DESC关键字。 而DISTINCT 差别,DISTINCT 不能部门利用。换句话说,DISTINCT 关键字应用于全部列而不但是它背面的第一个指定列。比方,查询 3 个字段 s_id,f_name,f_price,假如差别记载的这 3 个字段的组合值都差别,则全部记载都会被查询出来。
7、ORDER BY 可以和 LIMIT 混淆利用吗?

在利用 ORDER BY 子句时,应包管其位于 FROM 子句之后,假如利用 LIMIT,则必须位 于ORDER BY 之后,假如子句次序不精确,MySQL 将产生错误消息。
8、什么时间利用引号?

在查询的时间,会看到在 WHERE 子句中利用条件,有的值加上了单引号,而有的值未加。 单引号用来限定字符串,假如将值与字符串范例列举行比力,则必要限定引号;而用来与数值进 行比力则不必要用引号。
9、在 WHERE子 句中必须利用圆括号吗?

任何时间利用具有 AND 和 OR 操纵符的 WHERE 子句,都应该利用圆括号明白操纵次序。 假如条件较多,纵然能确定盘算序次,默认的盘算序次也大概会使 SQL 语句不易明白,因此使 用括号明白操纵符的序次,是一个好的风俗。
10、更新大概删除表时必须指定 WHERE子 句吗?

在前面章节中可以看到,全部的 UPDATE 和 DELETE 语句全都在 WHERE 子句中指定了条 件。假如省略 WHERE 子句,则 UPDATE 或 DELETE 将被应用到表中全部的行。因此,除非 确实计划更新大概删除全部记载,否则要留意利用不带 WHERE 子句的 UPDATE 或 DELETE  语句。发起在对表举行更新和删除操纵之前,利用 SELECT 语句确认必要删除的记载,以免造 成无法挽回的效果。
11、索引对数据库性能云云紧张,应该怎样利用它?

为数据库选择精确的索引是一项复杂的使命。假如索引列较少,则必要的磁盘空间和维护开销 都较少。假如在一个大表上创建了多种组合索引,索引文件也会膨胀很快。而另一方面,索引较多 可覆盖更多的查询。大概必要试验多少差别的计划,才气找到最有用的索引。可以添加、修改和删 除索引而不影响数据库架构或应用步伐计划。因此,应实验多个差别的索引从而创建最优的索引。
12、只管利用短索引。

对字符串范例的字段举行索引,假如大概应该指定一个前缀长度。比方,假如有一个  CHAR(255)的列,假如在前 10 个或 30 个字符内,多数值是惟一的,则不必要对整个列举行索引。 短索引不但可以进步查询速率而且可以节流磁盘空间、淘汰 I/O 操纵。
13、MySQL 存储过程和函数有什么区别?

在本质上它们都是存储步伐。函数只能通过 return 语句返回单个值大概表对象;而存储过程 不答应实行 return,但是可以通过 out 参数返回多个值。函数限定比力多,不能用暂时表,只能用表变量,另有一些函数都不可用等等;而存储过程的限定相对就比力少。函数可以嵌入在 SQL 语句中利用,可以在 SELECT 语句中作为查询语句的一个部门调用;而存储过程一样平常是作为一个独立的部门来实行。
14、存储过程中的代码可以改变吗?

现在,MySQL 还不提供对已存在的存储过程代码的修改,假如必须要修改存储过程,必须利用 DROP 语句删除之后,再重新编写代码,大概创建一个新的存储过程。
15、存储过程中可以调用其他存储过程吗?

存储过程包罗用户界说的 SQL 语句聚集,可以利用 CALL 语句调用存储过程,固然在存储 过程中也可以利用 CALL 语句调用其他存储过程,但是不能利用 DROP 语句删除其他存储过程。
16、存储过程的参数不要与数据表中的字段名雷同。

在界说存储过程参数列表时,应留意把参数名与数据库表中的字段名区别开来,否则将出 现无法预期的效果。
17、存储过程的参数可以利用中文吗?

一样平常环境下,大概会出现存储过程中传入中文参数的环境,比方某个存储过程根据用户的 名字查找该用户的信息,传入的参数值大概是中文。这时必要在界说存储过程的时间,在背面加 上 character set gbk,否则调用存储过程利用中文参数会堕落,好比界说 userInfo 存储过程,代码 如下:
CREATE PROCEDURE useInfo(IN u_name VARCHAR(50character set gbk, OUT u_age INT)18、MySQL 中视图和表的区别以及接洽是什么?
两者的区别:

  • (1)视图是已经编译好的 SQL 语句,是基于 SQL 语句的效果集的可视化的表,而表不是。
  • (2)视图没有现实的物理记载,而根本表有。
  • (3)表是内容,视图是窗口。
  • (4)表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以实时对它 举行修改,但视图只能用创建的语句来修改。
  • (5)视图是检察数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL 语句的聚集。从安全的角度来说,视图可以防止用户打仗数据表,因而用户不知道表布局。
  • (6)表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
  • (7)视图的创建和删除只影响视图自己,不影响对应的根本表。
两者的接洽:

  • 视图(view)是在根本表之上创建的表,它的布局(即所界说的列)和内容(即全部记载) 都来自根本表,它依据根本表存在而存在。
  • 一个视图可以对应一个根本表,也可以对应多个根本 表。
  • 视图是根本表的抽象和在逻辑意义上创建的新关系。
19、利用触发器时须特殊留意。

在利用触发器的时间必要留意,对于雷同的表,雷同的变乱只能创建一个触发器,好比对 表 account 创建了一个 BEFORE INSERT触发器,那么假如对表 account 再次创建一个 BEFORE INSERT 触发器,MySQL 将会报错,此时,只可以在表 account上创建 AFTER INSERT 大概 BEFORE UPDATE 范例的触发器。机动的运用触发器将为操纵省去许多贫苦。
20、实时删除不再必要的触发器。

触发器界说之后,每次实行触发变乱,都会激活触发器并实行触发器中的语句。假如需求 发生变革,而触发器没有举行相应的改变大概删除,则触发器仍旧会实行旧的语句,从而会影响 新的数据的完备性。因此,要将不再利用的触发器实时删除。
21、应该利用哪种方法创建用户?

创建用户有几种方法:GRANT 语句、CREATE USER 语句和直接操纵 user 表。一样平常环境, 最好利用 GRANT 大概 CREATE USER 语句,而不要直接将用户信息插入 user 表,由于 user 表中存储了全局级别的权限以及其他的账户信息,假如不测粉碎了 user 表中的记载,则大概会对  MySQ L服务器造成很大影响。
22、mysqldump 备份的文件只能在 MySQL 中利用吗?

mysqldump 备份的文本文件现实是数据库的一个副本,利用该文件不但可以在 MySQL 中恢 复数据库,而且通过对该文件的简朴修改,可以利用该文件在 SQL Server 大概 Sybase 等其他数 据库中规复数据库。这在某种水平上实现了数据库之间的迁徙。
23、怎样选择备份工具?

直接复制数据文件是最为直接、快速的备份方法,但缺点是根本上不能实现增量备份。备 份时必须确保没有利用这些表。假如在复制一个表的同时服务器正在修改它,则复制无效。备份 文件时,最好关闭服务器,然后重新启动服务器。为了包管数据的同等性,必要在备份文件前, 实行以下 SQL 语句:
CREATE PROCEDURE useInfo(IN u_name VARCHAR(50character set gbk, OUT u_age INT)以上原文语法但感觉有误,已无法验证,借此时机说一句,MySQL5.7 备份工具除了 mysqldump 还可选择 mydumper,固然要是裸装备还可以选择 XtraBackup 工具。
mysqlhotcopy 是一个 PERL 步伐,它利用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件地点的 呆板上,而且 mysqlhotcopy 只能用于备份 MyISAM 表。mysqlhotcopy 得当于小型数据库的备份, 数据量不大,可以利用 mysqlhotcopy 步伐天天举行一次完全备份。mysqldump 将数据表导成 SQL 脚本文件,在差别的 MySQL 版本之间升级时相对比力符合, 这也是最常用的备份方法。mysqldump 比直接复制要慢些。也就是把内存中的数据都革新到磁盘中,同时锁定命据表,以包管复制过程中不会有新的 数据写入。这种方法备份出来的数据规复也很简朴,直接复制回原来的数据库
24、平常应该打开哪些日记?

日记既会影响 MySQL 的性能,又会占用大量磁盘空间。因此,假如不须要,应尽大概少地 开启日记。根据差别的利用情况,可以思量开启差别的日记。比方,在开辟情况中优化查询服从 低的语句,可以开启慢查询日记;假如必要记载用户的全部查询操纵,可以开启通用查询日记; 假如必要记载数据的变动,可以开启二进制日记;错误日记是默认开启的。
25、怎样利用二进制日记?

二进制日记重要用来记载数据变动。假如必要记载数据库的变革,可以开启二进制日记。 基于二进制日记的特性,不但可以用来举行数据规复,还可用于数据复制。在数据库定期备份的 环境下,假如出现数据丢失,可以先用备份规复大部门数据,然后利用二进制日记规复近来备份 后变动的数据。在双机热备环境下,可以利用 MySQL 的二进制日记记载数据的变动,然后将变 更部门复制到备份服务器上。
26、怎样利用慢查询日记?

慢查询日记重要用来记载查询时间较长的日记。在开辟情况下,可以开启慢查询日记来记 录查询时间较长的查询语句,然后对这些语句举行优化。通过配 long_query_time 的值,可以机动地把握差别水平的慢查询语句。
27、是不是索引创建得越多越好?

公道的索引可以进步查询的速率,但不是索引越多越好。在实行插入语句的时间,MySQL 要为新插入的记载创建索引。以是过多的索引会导致插入操纵变慢。原则上是只有查询用的字段 才创建索引。
28、怎样利用查询缓冲区?

查询缓冲区可以进步查询的速率,但是这种方式只得当查询语句比力多、更新语句比力少 的环境。默认环境下查询缓冲区的巨细为 〇,也就是不可用。可以修改 queiy_cache_size 以调解 查询缓冲区巨细;修改 query_cache_type 以调解查询缓冲区的范例。在 my.ini 中修改 query_cache_size 和 query_cache_type 的值如下所示:
[mysqld]
query_cache_size= 512M query_cache_type= 1
query_cache_type=1表现开启查询缓冲区。只有在查询语句中包罗 SQL_NO_CACHE 关键字 时,才不会利用查询缓冲区。可以利用 FLUSH QUERY CACHE 语句来革新缓冲区,清算查询缓冲区中的碎片。
保举阅读:



模仿真实情况下超简朴超具体的 MySQL 5.7 安装

关系型数据库 MySQL 之 InnoDB 体系布局

关系型数据库 MySQL 表索引和视图详解

关系型数据库 MySQL 体系布局详解

关系型数据库 MySQL 表相干操纵

Linux 下 CentOS 7 安装教程

MySQL 底子知识学习

十大资源分享篇一



资源分享:



5T 技能资源大放送!包罗但不限于:Linux、Python、Oracle、MySQL、Java、前端、大数据、人工智能等,详细获取方式可关注本公众号大概添加我微信获取~~~



h0fi0eNLINUgbZIk.jpg wEIShIIbW73C23PZ.jpg


添加微信,可参加资源技能交换群
获取更多付费资源


Tkb7ol750N2mOYL0.jpg
长按 辨认二维码 即可关注!




上一篇:Centos7体系安装MongoDB数据库
下一篇:如安在centos7上安装FreeIPA的客户端
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-4-25 05:55 , Processed in 0.066509 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表