《Mysql必知必会》(MySQL Crash Course)内容很丰富,mysql的各个方面都涉及到了,从基本的SQL增删改查到触发器、事务以及安全管理和性能提升,本书都做了精简的介绍。
相比于另外两本相关的初学者读物——《SQL基础教程》MICK著和《MySQL与MariaDB学习指南》。这本书可能更适合想对mysql有全面了解的(比如对mysql的高级功能)或者想成为数据库管理员的人阅读。
简要介绍
- 本书的配套网站MySQL Crash Course,原作者很厉害,毕竟他之前就出了一本堪称全世界用得最多的一本SQL教程–
Sams Teach Yourself SQL in 10 Minutes
( 中文版《SQL必知必会》,人民邮电出版社出版) - 数据库(database) 是保存有组织的数据的容器(通常是一个文 件或一组文件,而数据库软件应称为DBMS(数据库管理系统)
- 模式(
schema
) && 数据库(database
)? —— 一般情况下,模式用作数据库的同义词,模式(schema) 关于数据库和表的布局及特性的信息 - 记录(
record
) && 行(row
)?—— 在很大程度上,这两个术语是可以互相 替代的,但从技术上说,行才是正确的术语 - SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。
- DBMS可分为两类:
一类为基于共享文件系统的DBMS
,另一类为基于客户机—服务器的DBMS。
- 前者如Microsoft Access和FileMaker等,用于桌面用途,通常不用于高端或更关键的应用
- 后者如MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机—服 务器的数据库。
- 写SQL语句的惯例——关键词都大写,表明列名小写
基本用法
- 多用SHOW,
HELP SHOW
,SHOW GRANTS
,SHOW ERRORS
,SHOW WARNINGS
DESCRIBE customers;
是SHOW COLUMNS FROM customers;
的快捷方式INFORMATION_SCHEMA
- 在处理SQL语句时,其中所有空格都被忽略。
- 查询结果默认是升序排序(从A到Z)
!=
等同于<>
操作符- SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符!!!
- 最好使用圆括号明确地分组相应的操作符
WHERE id=1002 OR id=1003 AND price>=10
这个WHERE字句的计算次序呢?
- MySQL支持使用NOT对
IN
、BETWEEN
和EXISTS
子句取反,这与多数其他DBMS允许使用NOT对各种条件 取反有很大的差别。 - 从技术上说,LIKE是谓词而不是操作符。
- 虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。 即使是
WHERE prod_name LIKE '%'
也不能匹配用值NULL作为产品名的行 - MySQL正则表达式
- 用
REGEXP
代替LIKE
- 为了匹配特殊字符,必须用
\\
为前导。\\-
表示查找-,\\.
表示查找.
。如WHERE name REGEXP '\\.'
\
&&\\
? 多数正则表达式实现使用单个反斜杠转义特殊字符, 以便能使用这些字符本身。但MySQL要求两个反斜杠(MySQL 自己解释一个,正则表达式库解释另一个)。- 常用的字符类(character class), 如
[:alnum:]
匹配任意字母和数字(同[a-zA-Z0-9]),[:alpha:]
匹配任意字符(同[a-zA-Z]) - 定位元字符:
[[:<:]]
和[[:>:]]
分别匹配词的开始和结尾
- 用
- LIKE和REGEXP 的不同在于,LIKE匹配整个串而REGEXP匹配子串。利用定位 符,通过用
^
开始每个表达式,用$
结束每个表达式,可以使 REGEXP的作用与LIKE一样。 - 多数DBMS使用
+或||
来实现拼接, MySQL则使用Concat()
函数来实现 SUM(), MIN(), MAX()
会忽略列值为NULL的行。COUNT()
函数有两种使用方式。
- 使用
COUNT(*)
对表中行的数目进
- 使用