美文网首页
《MySQL必知必会》学习笔记(1-8)

《MySQL必知必会》学习笔记(1-8)

作者: leacoder | 来源:发表于2019-05-14 23:03 被阅读0次

    《MySQL必知必会》学习笔记 目录

    https://www.jianshu.com/p/97bab08c6755

    本篇内容

    了解SQL、MySQL简介、使用MySQL、检索数据 、排序检索数据、过滤数据、用通配符进行过滤

    MySQL安装 自行谷歌

    《MySQL 必知必会》创建样例表

    mysql_scripts.zip 下载 下面链接
    链接:https://pan.baidu.com/s/1y-OZG9fbdKFP3r-XlIjeMA
    提取码:ehg5

    (1)创建一个新的数据源

    create database crashcourse; (这里使用书中的数据源名称)
    

    (2)选择新的数据源

    use crashcourse;
    

    (3)执行creat.sql脚本

      source create.sql;   (使用mysql命令行使用程序的方法,source+文件路径 如有必要可能为绝对路径)
    

    (4)用populate.sql文件填充各个新表

    source populate.sql; 
    

    检测样例创建是否成功

    image.png

    更多可参看:
    https://www.runoob.com/mysql/mysql-tutorial.html

    第一章 了解SQL

    介绍数据库和SQL,它们是学习MySQL的先决条件。

    1.1 数据库基础

    1.1.1 什么是数据库

    数据库是一个以某种有组织的方式存储的数据集合。理解数据库的一种最简单的办法是将其想象为一个文件柜。此文件柜是一个存放数据的物理位置,不管数据是什么以及如何组织的。

    数据库(database)
    保存有组织的数据的容器(通常是一个文件或一组文件)。

    1.1.2 表

    表是一种结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录,或者其他信息清单。

    表(table)
    某种特定类型数据的结构化清单。

    关键的一点在于,存储在表中的数据是一种类型的数据或一个清单。

    数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,这表示数据库中没有其他表具有相同的名字。

    表名
    表名的唯一性取决于多个因素,如数据库名和表名等的结合。这表示,虽然在相同数据库中不能两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。

    模式(schema)
    关于数据库和表的布局及特性的信息。

    1.1.3 列和数据类型

    表由列组成。列中存储着表中某部分的信息。

    列(column)
    表中的一个字段。所有表都是由一个或多个列组成的

    数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。

    数据类型(datatype)
    所容许的数据的类型。每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据。

    1.1.4 行

    表中的数据是按行存储的,所保存的每个记录存储在自己的行内。

    行(row) 表中的一个记录。

    1.1.5 主键

    表中每一行都应该有可以唯一标识自己的一列(或一组列)。

    主键(primary key)
    一列(或一组列),其值能够唯一区分表中每个行。
    唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

    1.2 什么是SQL

    SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。 SQL是一种专门用来与数据库通信的语言。

    第 2 章MySQL简介

    介绍什么是MySQL,以及在MySQL中可以应用什么工具。

    2.1 什么是MySQL

    数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。 MySQL是一种DBMS,即它是一种数据库软件

    MySQL、 Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。 服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。

    与数据文件打交道的只有服务器软件。关于数据、数据添加、删除和数据更新的所有请求都由服务器软件完成。客户机是与用户打交道的软件。

    2.2 MySQL工具

    MySQL是一个客户机—服务器DBMS,因此,为了使用MySQL,需要有一个客户机,即你需要用来与MySQL打交道(给MySQL提供要执行的命令)的一个应用。

    2.2.1 mysql命令行实用程序

    在操作系统命令提示符下输入mysql -u root -p,提示输入密码

    MySQL选项和参数

    如果仅输入mysql, 可能会出现一个错误消息。mysql接受你可以(和可能需要)使用的一组命令行参数。例如,为了指定用户登录名ben,应该使用mysql -u ben。为了给出用户名、主机名、端口和口令,应该使用mysql -u ben -p -h myserver -P 9999。 mysql -u root -p

    请注意:

    • 命令输入在mysql>之后;
    • 命令用;或\g结束,换句话说,仅按Enter不执行命令;
    • 输入help或\h获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入help select获得使用SELECT语句的帮助);
    • 输入quit或exit退出命令行实用程序。
    MySQL.png

    2.2.2 MySQL Administrator

    MySQL Administrator(MySQL管理器)是一个图形交互客户机,用来简化MySQL服务器的管理。

    获得MySQL Administrator MySQL Administrator不作为核心MySQL 的 组 成 部 分 安 装 。 必 须 从 http://dev.mysql.com/downloads/下载它

    Ubuntu 中 mysql数据库路径
    /var/lib/mysql 日志文件,数据库 [重点要知道这个]

    现使用MySQL Workbench

    2.2.3 MySQL Query Browser

    MySQL Query Browser为一个图形交互客户机,用来编写和执行MySQL命令。

    第3章 使用MySQL

    学习如何连接和登录到MySQL,如何执行MySQL语句,以及如何获得数据库和表的信息。

    3.1 连接

    MySQL与所有客户机—服务器DBMS一样,要求在能执行命令之前登录到DBMS。

    3.2 选择数据库

    在你最初连接到MySQL时,没有任何数据库打开供你使用。在你能执行任意数据库操作前,需要选择一个数据库。为此,可使用USE关键字。

    关键字(key word) 作为MySQL语言组成部分的一个保留字。决不要用关键字命名一个表或列。附录E列出了MySQL的关键字。

    USE.png

    3.3 了解数据库和表

    内部的表一般不直接访问。可用MySQL的SHOW命令来显示这些信息(MySQL从内部表中提取这些信息)。

    SHOW DATABASES;
    
    3.3DATABASES.png

    SHOW DATABASES;返回可用数据库的一个列表。包含在这个列表中的可能是MySQL内部使用的数据库

    SHOW TABLES;
    
    3.3TABLES.png

    SHOW TABLES;返回当前选择的数据库内可用表的列表。

    SHOW COLUMNS FROM customer;
    
    3.3COLUMNS .png

    SHOW COLUMNS 要 求 给 出 一 个 表 名 ( 这 个 例 子 中 的 FROMcustomers),它对每个字段返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息(如字段cust_id的auto_increment)

    DESCRIBE语句 MySQL支持用DESCRIBE作为SHOW COLUMNS FROM的一种快捷方式。换句话说, DESCRIBE customers;是SHOW COLUMNS FROM customers;的一种快捷方式。

    3.3DESCRIBE.png

    所支持的其他SHOW语句还有:

    • SHOW STATUS,用于显示广泛的服务器状态信息;

    • SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;

    • SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;

    • SHOW ERRORS和SHOW WARNINGS, 用来显示服务器错误或警告消息。

    HELP SHOW; 显示允许的SHOW语句。

    第 4 章 检 索 数 据

    介绍如何使用SELECT语句从表中检索一个或多个数据列。

    4.1 SELECT语句

    SQL语句是由简单的英语单词构成的。这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的。

    最经常使用的SQL语句就是SELECT语句了。它的用途是从一个或多个表中检索信息

    使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择

    4.2 检索单个列

    SELECT prod_name FROM products;
    
    4.2SELECT.png

    4.3 检索多个列

    要想从一个表中检索多个列,使用相同的SELECT语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。

    SELECT   prod_id, prod_name, prod_price FROM products;
    
    4.3SELECT.png

    4.4 检索所有列

    除了指定所需的列外, SELECT语句还可以检索所有的列而不必逐个列出它们。这可以通过在实际列名的位置使用星号(*)通配符来达到

    SELECT * FROM products;
    
    4.4SELECT.png

    4.5 检索不同的行

    DISTINCT关键字指示MySQL只返回不同的值。

    SELECT DISTINCT vend_id FROM products;
    
    4.5DISTINCT.png

    SELECT DISTINCT vend_id告诉MySQL只返回不同(唯一)的vend_id行,因此只返回4行

    4.6 限制结果

    SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句。

    SELECT prod_name FROM products LIMIT 5;
    
    4.6LIMIT.png

    此语句使用SELECT语句检索单个列。 LIMIT 5指示MySQL返回不多于5行。

    可指定要检索的开始行和行数

    SELECT prod_name FROM products LIMIT 7,5;
    
    4.6LIMIT2.png

    LIMIT 7, 5指示MySQL返回从行7开始的5行。第一个数为开始位置,第二个数为要检索的行数。

    行0 检索出来的第一行为行0而不是行1。因此, LIMIT 1, 1将检索出第二行而不是第一行。

    MySQL 5的LIMIT语法 MySQL 5支持LIMIT的另一种替代语法。 LIMIT 4 OFFSET 3意为从行3开始取4行,就像LIMIT 3, 4一样。

    SELECT prod_name FROM products LIMIT 7 OFFSET 5;
    
    4.6OFFSET.png

    4.7 使用完全限定的表名

    可能会使用完全限定的名字来引用列(同时使用表名和列字)。

    SELECT products.prod_name FROM products;
    

    表名也可以是完全限定的

    SELECT products.prod_name FROM crashcourse.products;
    

    第5章 排序检索数据

    如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据

    5.1 排序数据

    子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。

    为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。

    SELECT prod_name FROM products ORDER BY prod_name;
    

    5.2 按多个列排序

    为了按多个列排序,只要指定列名,列名之间用逗号分开即可

    下面的代码检索3个列,并按其中两个列对结果进行排序——首先按价格,然后再按名称排序。

    SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
    
    5.2ORDER.png

    5.3 指定排序方向

    数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可以使用ORDER BY子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定DESC关键字。

    SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;
    
    5.3DESC.png

    在多个列上降序排序 如果想在多个列上进行降序排序, 必须对每个列指定DESC关键字。

    使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。

    SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1;
    
    5.3ORDER.png

    第6章 过 滤 数 据

    讲授如何使用SELECT语句的WHERE子句指定搜索条件。

    6.1 使用WHERE子句

    数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件( search criteria) ,搜索条件也称为过滤条件( filtercondition) 。

    在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。

    SELECT prod_name, prod_price FROM products WHERE prod_price = 2.50;
    
    6.1WHERE.png

    6.2 WHERE子句操作符

    WHERE子句操作符

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

    6.2.1 检查单个值

    SELECT prod_name, prod_price FROM products WHERE prod_name = 'fuses';
    
    6.2.1WHERE1.png
    SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
    
    6.2.1WHERE2.png

    6.2.2 不匹配检查

    SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
    
    6.2.2WHERE1.png
    SELECT vend_id, prod_name FROM products WHERE vend_id != 1003;
    
    6.2.2WHERE2.png

    6.2.3 范围值检查

    为了检查某个范围的值,可使用BETWEEN操作符。其语法与其他WHERE子句的操作符稍有不同,因为它需要两个值,即范围的开始值和结束值。

    SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
    
    6.2.3BETWEEN.png

    6.2.4 空值检查

    在创建表时,表设计人员可以指定其中的列是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。

    NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。

    SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。

    SELECT prod_name FROM products WHERE prod_price IS NULL;
    
    6.2.4WHEREISNULL1.png
    SELECT cust_id FROM customers WHERE cust_email IS NULL;
    
    6.2.4WHEREISNULL2.png

    第 7 章 数 据 过 滤

    如何组合WHERE子句以建立功能更强的更高级的搜索条件。

    7.1 组合WHERE子句

    为了进行更强的过滤控制, MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

    7.1.1 AND操作符

    为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件。

    SELECT prod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
    
    7.1.1WHEREAND.png

    AND 用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行。

    7.1.2 OR操作符

    OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。

    SELECT prod_price, prod_name FROM products WHERE vend_id = 1002 OR vend_id = 1003;
    
    7.1.2WHEREOR.png

    OR WHERE子句中使用的关键字,用来表示检索匹配任一给定条件的行。

    7.1.3 计算次序

    WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。
    但是,组合AND和OR带来了一个有趣的问题。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。此问题的解决方法是使用圆括号明确地分组相应的操作符。

    SELECT prod_price, prod_name FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;
    
    7.1.3WHERE.png

    7.2 IN操作符

    圆括号在WHERE子句中还有另外一种用法。 IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。

    SELECT prod_price, prod_name FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;
    
    7.2IN.png

    为什么要使用IN操作符?其优点具体如下

    • 在使用长的合法选项清单时, IN操作符的语法更清楚且更直观。
    • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
    • IN操作符一般比OR操作符清单执行更快。
    • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。第14章将对此进行详细介绍

    IN WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。

    7.3 NOT操作符

    WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

    NOT WHERE子句中用来否定后跟条件的关键字。

    SELECT prod_price, prod_name FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
    
    7.3NOT.png

    MySQL中的 NOT MySQL 支 持 使 用 NOT 对 IN 、 BETWEEN 和EXISTS子句取反,这与多数其他DBMS允许使用NOT对各种条件取反有很大的差别。

    第 8 章 用通配符进行过滤

    介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。

    8.1 LIKE操作符

    通配符(wildcard) 用来匹配值的一部分的特殊字符。

    搜索模式(search pattern) 由字面值、通配符或两者组合构成的搜索条件。

    为在搜索子句中使用通配符,必须使用LIKE操作符。 LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

    8.1.1 百分号(%)通配符

    最常使用的通配符是百分号(%)。在搜索串中, %表示任何字符出现任意次数。

    SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';
    
    8.1.1LIKE.png

    区分大小写 根据MySQL的配置方式,搜索可以是区分大小写的。

    8.1.2 下划线(_)通配符

    另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

    SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
    
    8.1.2LIKE1.png

    区别:

    SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '% ton anvil';
    
    8.1.2LIKE 2.png

    8.2 使用通配符的技巧

    MySQL的通配符很有用。但这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。

    • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
    • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
    • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

    GitHub链接:
    https://github.com/lichangke/LeetCode
    知乎个人首页:
    https://www.zhihu.com/people/lichangke/
    简书个人首页:
    https://www.jianshu.com/u/3e95c7555dc7
    个人Blog:
    https://lichangke.github.io/
    欢迎大家来一起交流学习

    相关文章

      网友评论

          本文标题:《MySQL必知必会》学习笔记(1-8)

          本文链接:https://www.haomeiwen.com/subject/oiddaqtx.html