《Mysql必知必会》笔记(一)


一、数据库基本概念

数据库

数据库(database)保存有组织的数据的容器,通常是一个文件或一组文件。
数据库管理系统(DBMS)使用DBMS访问数据库,可理解为数据库软件。

表和模式

表(table) 某种特定类型数据的结构化清单。同一个数据库中表名唯一。
模式(schema) 关于数据库和表的布局及特性的信息。

列和数据类型

列(column) 表中的一个字段,所有表由一个或多个列组成。
数据类型(datatype) 数据库中每个列都有相应的数据类型,数值/字符/……。

行(row) 或称为数据库记录。

主键

主键(primary key) 一列或一组列,其值能够唯一区分表中每个行。任意两行都不具有相同的主键值,每个行都必须有一个主键值。
主键的好习惯:不更新主键列中的值;不重用主键列的值;不在主键列中使用可能会更改的值。

外键

SQL

Structured Query Language, 结构化查询语言。

二、Mysql

实用程序

  • 命令输入在mysql>之后
  • 命令用;或\g结束
  • 输入help或\h获得帮助,help select获得使用SELECT语句的帮助
  • 输入quit或exit推出命令行实用程序。

常用命令

USE crashcourse              //选择数据库
SHOW DATABASES               //返回可用数据库的一个列表
SHOW TABLES                  //返回当前选择的数据库内可用表的列表
SHOW COLUMNS FROM customers  //返回指定表名中每个字段的行
DESCRIBE customers           //SHOW COLUMNS FROM 语句的快捷方式
SHOW STATUS                  //用于显示广泛的服务器状态信息
SHOW CREATE DATABASE/TABLE   //创建特定数据库或表
SHOW GRANTS                  //显示授予用户的安全权限
SHOW ERRORS/WARNINGS         //显示服务器错误或警告消息

三、语句总结

1. 检索数据

FROM子句

SELECT [column_name] FROM [table_name]					  	     //检索单个列
SELECT [column_name1, column_name2, ...] FROM [table_name] 	   	 //检索多个列
SELECT * FROM [table_name]                             	      	 //检索所有列
SELECT DISINCT [column_name] FROM [table_name]          	     //唯一返回匹配的行,若有重复只返回一次
SELECT [column_name] FROM [table_name] LIMIT n                   //检索单个列,返回不多于n行
SELECT [column_name] FROM [table_name] LIMIT n,m                 //检索单个列,返回从n行开始的m行
SELECT [column_name] FROM [table_name] LIMIT m OFFSET n          //从行3开始取4行
SELECT [table_name.column_name] FROM [database_name.table_name]  //使用完全限定的表名

注意事项

  1. 多条SQL语句必须以分号分隔,单条不需要,但通常加上;
  2. SQL语句不区分大小写,有些版本的标识符可能不同;
  3. 处理SQL语句时空格忽略,分行便于阅读和调试;
  4. 不能部分使用DISTINCT,除非多列完全不同;
  5. 行数从行0开始计;

2. 排序检索数据

ORDER BY子句

SELECT [column_name] FROM [table_name] ORDER BY [column_name]                                     //取一列或多列的名字,据此对输出排序
SELECT [column_name1, column_name2, ...] FROM [table_name] ORDER BY [column_name1, column_name3]  //取一列或多列的名字,据此对输出排序

DESC关键字

SELECT [column_name1, column_name2, ...] FROM [table_name] ORDER BY [column_name2] DESC                  //降序排列
SELECT [column_name1, column_name2, ...] FROM [table_name] ORDER BY [column_name2] DESC, [column_name1]  //降序排列,再按column_name1排列
SELECT [column_name1] FROM [table_name] ORDER BY [column_name1] DESC/ASC LIMIT 1                         //找出按column_name1排序的最大或最小值

注意事项

  1. DESC关键字只应用到直接位于其前面的列名,若想多个列降序,必须对每个列指定DESC关键字。升序是ASC(ASCENDING);
  2. ORDER BY子句必须是SELECT语句中的最后一条子句。

3. 过滤数据

SELECT [column_name1, column_name2, ...] FROM [table_name] WHERE [搜索条件]                       //返回符合搜索条件的行
SELECT [column_name1, column_name2, ...] FROM [table_name] WHERE [column_name1] BETWEEN m AND n  //AND关键字
SELECT [column_name1, column_name2, ...] FROM [table_name] WHERE [column_name1] IS NULL          //IS NULL子句空值检查(不是指值为0)

WHERE子句操作符

操作符说明
=等于
<>不等于
!=不等于
<>不等于
<小于
<=小于等于
>大于
>=大于等于
BETWEEN在指定两个值之间

AND操作符

SELECT [prod_id, prod_price, prod_name]
FROM [products]
WHERE [vend_id = 1003] AND [prod_price <= 10];

OR操作符

SELECT [prod_price, prod_name]
FROM [products]
WHERE [vend_id = 1002] OR [vend_id = 1003]; 

//由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品
SELECT [prod_price, prod_name]
FROM [products]
WHERE [vend_id = 1002] OR [vend_id = 1003] AND [prod_price >= 10]; 

IN操作符
用来指定条件范围,范围中的每个条件都可以进行匹配,匹配条件在圆括号中逗号分隔,功能等同于OR。

SELECT [prod_price, prod_name]
FROM [products]
WHERE [vend_id] IN (1002, 1003)
order by [prod_name]; 

NOT操作符
NOT与IN联合使用便于找出与条件列表不匹配的行。

SELECT [prod_price, prod_name]
FROM [products]
WHERE [vend_id] NOT IN (1002, 1003)
order by [prod_name]; 

注意事项

  1. 同时使用ORDER BY和WHERE子句时,ORDER BY位于WHERE之后;
  2. MySQL匹配默认不区分大小写;
  3. 单引号用来限定字符串;
  4. 过滤选择出不具有特定值的行时,无法返回具有NULL值的行,因此要验证返回数据中确实给出了被过滤列具有NULL的行;
  5. SQL在处理OR操作符之前,优先处理AND操作符。
  6. IN操作符一般比OR操作符清单执行更快;
  7. MySQL支持NOT对IN/BETWEEEN/EXISTS子句取反,与其他DBMS允许使用NOT对各种条件取反不同。

4. 用通配符进行过滤

通配符(wildcard) 用来匹配值的一部分的特殊字符。
搜索模式(search pattern) 由字面值、通配符或两者组合构成的搜索条件。
LIKE操作符 本质是谓词,指示MySQL后面跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

百分号(%)通配符
%表示任何字符出现任意次数,可以位于模式的两端或中间

//检索任意jet起头的词,%告诉MySQL接受jet之后的任意字符
SELECT [prod_id, prod_name]
FROM [products]
WHERE [prod_name] LIKE 'jet%';

//匹配任何位置包含文本anvil的值
SELECT [prod_id, prod_name]
FROM [products]
WHERE [prod_name] LIKE '%anvil%';

下划线(_)通配符
下划线只匹配单个字符

SELECT [prod_id, prod_name]
FROM [products]
WHERE [prod_name] LIKE '_ ton anvil';

注意事项

  1. 根据MySQL的配置方式,搜索区分大小写;
  2. 尾空格可能会干扰通配符匹配,例如在保存词anvil时,如果后面有一个或多个空格,则子句WHERE prod_name LIKE '%anvil‘ 将不会匹配他们。解决方法是在搜索模式最后加一个%(%可以匹配0个字符),或使用函数去掉首尾空格。
  3. 通配符置于搜索模式的开始处,搜索起来是最慢的。除非有必要否则不要用在搜索模式的开始。通配符不要过度使用。

5. 用正则表达式进行搜索

关键字REGEXP
REGEXP后面的内容作为正则表达式处理

//匹配出JetPack 1000和JetPack 2000
SELECT prod_name
FROM products
WHERE prod_name REGEXP '.000'
ORDER BY prod_name;

OR匹配
为搜索两个串之一,使用 |

//匹配出JetPack 1000和JetPack 2000,多个OR条件可并入单个正则表达式
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;

匹配几个字符之一
匹配特定字符,可指定一组[和]括起来的字符完成。

//匹配出1 ton anvil和2 ton anvil
//[]是另一种形式的OR语句
SELECT prod_name
FROM products
WHERE prod_name REGEXP '[123] Ton'
ORDER BY prod_name;

//检索‘1’或‘2’或’3 ton'
SELECT prod_name
FROM products
WHERE prod_name REGEXP '1|2|3 Ton'
ORDER BY prod_name;

^表示否定一个字符集,如

[^123] 匹配除123外的任何东西

匹配范围
如[1-3]和 [0-9], [a-z]匹配任意字母字符。

匹配特殊字符
用\作为前导,如’\\-‘表示查找-,’\\.'表示查找.。

空白元字符
元字符说明
\\f换页
\\n换行
\\r回车
\\t制表
\\v纵向制表
\\\反斜杠

匹配字符类

说明
[:alnum:]任意字母和数字(同[a-zA-Z0-9])
[:alpha:]任意字符(同[a-zA-Z])
[:blank:]空格和制表(同[\\t])
[:cntrl:]ASCII控制字符(ASCII 0-31和127)
[:digit:]任意数字(同[0-9])
[:graph:]与[:print:]相同但不包括空格
[:lower:]任意小写字母(同[a-z])
[:upper:]任意大写字母(同[A-Z])
[:print:]任意可打印字符
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]包括空格在内的任意空白字符(同[\\f \\n \\r \\t \\v])
[:xdigit:]任意十六进制数字(同[a-fA-F0-9])

匹配多个实例

重复元字符
元字符说明
*0个或多个匹配
+1个或多个匹配,同{1,}
0个或1个匹配,同{0,1}
{n}指定数目的匹配
{n,}不少于数目的匹配
{n,m}匹配数目的范围(m不超过225)
\\([0-9]sticks?\\)表示:\\(匹配(,[0-9]匹配任意数字,sticks?匹配stick和sticks,\\)匹配)
[[:digit:]]{4}表示:匹配连在一起的4位数字

定位符
匹配特定位置的文本

定位元字符
元字符说明
^文本的开始
$文本的结尾
[[:<:]]词的开始
[[:>:]]词的结尾
'^[0-9\\.]'表示:在.或任意数字为串中第一个字符时才匹配

注意事项

  1. 匹配不区分大小写,为区分大小写可在匹配条件前使用BINARY关键字;
  2. 如果被匹配的文本仅在列值中出现,LIKE将不会找到它,相应的行也不会被返回除非使用通配符。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回;LIKE匹配整个串而REGEXP匹配子串;
  3. MySQL要求两个反斜杠转义特殊字符;
  4. ^在集合中用来否定该集合,否则用来指串的开始处;
  5. 正则表达式测试:REGEXP检查返回0(不匹配)或1(匹配),如SELECT ‘hello’ REGEXP ’[0-9]’ 返回0,因为hello中没有数字。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《MySQL必知必会》是一本经典的MySQL数据库入门教材,该书由Ben Forta撰写,适合初学者和有一定数据库基础的读者阅读。这本书着重介绍了MySQL数据库的基本原理、数据类型、查询语句、数据操作、事务控制以及安全性等方面的知识。 本书以简单易懂的方式讲解了MySQL数据库的基本概念和操作技巧,适合初学者进行自学。无论是想学习数据库编程的开发人员,还是想了解数据库管理的系统管理员,都可以通过阅读本书掌握必要的MySQL数据库知识。 《MySQL必知必会》的内容丰富全面,并且配有大量的示例和练习题,读者可以通过实践加深对知识的理解和掌握。此外,该书还介绍了一些高级主题,如存储过程、触发器和视图等,帮助读者进一步提升数据库应用能力。 总的来说,《MySQL必知必会》是一本对于学习MySQL数据库的人来说非常有价值的参考书。无论是初学者还是有一定数据库基础的人,都可以通过阅读本书快速学习和掌握MySQL数据库的相关知识。读者可以根据自己的需求和兴趣,选择适合自己的章节进行阅读和学习。 ### 回答2: MySQL必知必会是一本非常有价值的参考书籍,对于想要学习和掌握MySQL数据库的人来说非常有用。这本书详细介绍了MySQL数据库的基本概念、基础语法和高级功能,以及如何优化和管理数据库。 首先,MySQL必知必会通过简洁清晰的语言和丰富的实例,介绍了数据库的概念和原理,帮助读者建立起正确的数据库思维模式。它从关系型数据库的基本概念开始讲解,包括表、行、列、主键等,然后逐步介绍了SQL语言的基本语法和常用命令,如SELECT、INSERT、UPDATE、DELETE等。 其次,MySQL必知必会还深入讲解了MySQL数据库的高级功能,如多表查询、子查询、连接和视图等。这些功能对于处理复杂的数据查询和分析非常重要,通过学习这些知识,读者可以更加灵活地操作数据库,提高工作效率。 此外,MySQL必知必会还涵盖了数据库优化和管理的内容。它介绍了如何正确设计和规划数据库结构,以及如何使用索引和分区来提高查询效率。此外,它还讲解了如何备份和恢复数据库,以及如何监控和优化数据库性能。 总之,MySQL必知必会是一本详细介绍MySQL数据库基础知识和高级功能的优秀书籍。无论是初学者还是有一定经验的开发者,都可以从中学习到很多宝贵的知识和技巧。它不仅可以帮助读者快速入门MySQL,还可以帮助他们提高数据库操作的能力和效率。无论是学习、工作还是项目开发,都值得推荐阅读。 ### 回答3: MySQL必知必会是一本非常受欢迎的MySQL入门书籍,适合初学者和有一定基础的用户阅读。这本书的作者是Ben Forta,他详细介绍了MySQL数据库的基本概念、语法以及如何进行数据库设计和管理。 MySQL必知必会的特点之一是其简洁明了的语言和结构。它从最基本的概念开始讲解,逐步引导读者了解如何创建和管理数据库、表和索引。书中还包含大量的示例和练习题,帮助读者加深理解,并提供了一些常见错误和解决方法。 此外,这本书还涵盖了MySQL数据库的高级主题,如安全性、性能调优和复制。通过深入研究这些主题,读者可以进一步提升他们在MySQL数据库管理方面的技能。 MySQL必知必会还强调了SQL语言的重要性,它是用于与数据库进行交互的主要语言。读者将学习如何使用SQL语句查询、插入、更新和删除数据。此外,书中还介绍了一些高级的SQL技巧,如JOIN和子查询。 总的来说,MySQL必知必会是一本非常实用的MySQL入门书籍,不仅适合初学者,也适合那些希望巩固和提升MySQL数据库管理技能的用户。无论是在学术领域还是实际工作中,掌握MySQL数据库是一个非常有用的技能,而这本书可以帮助读者快速入门和精通这一技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值