MySQL必知必会学习笔记

(共同学习,持续更新…)

目录

  • 一、数据库基础
    • 1.1 数据库基础
    • 1.2 什么是SQL?
  • 二、MySQL简介
    • 2.1 什么是MySQL?
    • 2.2 MySQL工具
  • 三、使用MySQL
    • 3.1 连接
    • 3.2 了解数据库和表
  • 四、检索数据
    • 4.1 SELECT语句
  • 五、排列检索数据
    • 5.1排列数据
    • 5.2 按照多个列排列
    • 5.3 指定排序方向
    • 5.4 ORDER BY和LIMIT的组合
  • 六、过滤数据
    • 6.1使用WHERE子句
    • 6.2WHERE字句操作符
  • 七、数据过滤
    • 7.1组合WHERE子句

一、数据库基础

1.1 数据库基础

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

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

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

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

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

    数据类型限制可存储在列中的数据种类,数据类型还帮助正确地排序数据,并在优化磁盘使用方面起重要的作用。因此,在创建表时必须对数据类型给予特别的关注。

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

    表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象为网格,网格中垂直的列为表列,水平行为表行。

  • 主键(primary key) 一列(或一组列),其值能够唯一区分表

    主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。表中的任何列都可以作为主键,只要它满足以下条件:

    (1)任意两行都不具有相同的主键值;

    (2)每个行都必须具有一个主键值(主键列不允许NULL值)。

    主键规则:

    主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。

我们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的,数据库软件应称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备上的文件,但也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为你并不直接访问数据库;你使用的是DBMS,它替你访问数据库。

1.2 什么是SQL?

SQL 是结构化查询语言(Structured Query Language的缩写。SQL是一种专门用来与数据库通信的语言。

SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL,但事实上任意两个DBMS实现的SQL都不完全相同

二、MySQL简介

2.1 什么是MySQL?

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

MySQL的特点:成本低,开源免费;性能高,运行非常快;可信赖,操作简单.

客户机-服务器软件

DBMS可分为两类

  • 一类为基于共享文件系统的DBMS(包括诸如Microsoft Access和FileMaker),用于桌面用途,通常不用于高端或更关键的应用。

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

为进行所有数据库交互,客户机软件都要与服务器软件进行通信。关于数据、数据添加、删除和数据更新的所有请求来自运行客户机软件的计算机,客户机是与用户打交道的软件。例如,如果你请求一个按字母顺序列出的产品表,则客户机软件通过网络提交该请求给服务器软件。服务器软件处理这个请求,根据需要过滤、丢弃和排序数据;然后把结果送回到你的客户机软件。

MySQL的版本

MySQL的当前版本为版本5,下面是最近版本中引入的主要更改。

  • 4——InnoDB引擎,增加事务处理、并、改进全文本搜索(等的支持。
  • 4.1——对函数库、子查询、集成帮助等的重要增加。
  • 5——存储过程、触发器、游标、视图等。

2.2 MySQL工具

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

例如,

  • mysql命令行实用程序
  • MySQL Administrator (MySQL管理器)是一个图形交互客户机
  • SQL Query Browser,为一个图形交互客户机,用来编写和执行MySQL命令

三、使用MySQL

3.1 连接

MySQL与所有客户机—服务器DBMS一样,要求在能执行命令之前登录到DBMS。MySQL在内部保存自己的用户列表,并且把每个用户与各种权限关联起来。

为连接数据库,需要以下信息:

  • 主机名(计算机名)——如果连接到本地MySQL服务器,为localhost;
  • 端口(如果使用默认端口3306之外的端口);
  • 一个合法的用户名
  • 用户口令(如果需要)。

在连接之后,你就可以访问你的登录名能够访问的任意数据库和表了。

3.2 了解数据库和表

数据库、表、列、用户、权限等的信息被存储在数据库和表中。

展示所有数据库:SHOW DATABASES;

选择数据库:USE 数据库名;

MySQL必知必会学习笔记_第1张图片
展示当前数据库的表:SHOW TABLES;
MySQL必知必会学习笔记_第2张图片
展示某个表的所有列:SHOW COLUMNS FROM 表名;DESCRIBE 表名;

MySQL必知必会学习笔记_第3张图片

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

显示广泛的服务器状态信息:SHOW STATUS;
MySQL必知必会学习笔记_第4张图片
其他SHOW语句:

  • SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
  • SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;
  • SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。

四、检索数据

4.1 SELECT语句

检索单个列:SELECT 列名 FROM 表名;

MySQL必知必会学习笔记_第5张图片

SQL语句不区分大小写,因此SELECT与select是相同的。

在处理SQL语句时,其中所有空格都被忽略。SQL语句可以在一行上给出,也可以分成许多行。多行更容易阅读和调试。

检索多个列:SELECT 列名1,列名2 FROM 表名;

MySQL必知必会学习笔记_第6张图片

检索所有列:SELECT * FORM 表名;

MySQL必知必会学习笔记_第7张图片

除非需要每个列,一般不使用通配符*,检索不需要的列会减低检索和应用程序的性能

检索不同的行:SELECT DISTINCT 列名 FROM 表名;

去掉相同值,返回列中不同的值(一列名的行)

MySQL必知必会学习笔记_第8张图片
MySQL必知必会学习笔记_第9张图片

限制结果:SELECT 列名 FROM 表名 LIMIT 5;

用LIMIT关键字,返回前几行

MySQL必知必会学习笔记_第10张图片

也可以指定检索的开始行和需要检索的行数, LIMIT 2, 4 意思是从第2行开始, 返回4行。

MySQL必知必会学习笔记_第11张图片

LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行),MySQL将只返回它能返回的那么多行。

使用完全限定的表名:SELECT 表名.列名 FROM 表名;

也可以限定表名,SELECT 表名 列名 FROM 数据库名.表名;

五、排列检索数据

5.1排列数据

子句(clause) SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字所提供的数据组成。子句的例子有SELECT语句的FROM子句。为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。 ORDER BY子句取一个或多个列的名字。

输入:SELECT name FROM goods ORDER BY name

按照name的字母顺序排列数据。也可以通过非选择列进行排序,即ORDER BY后不是name也行。
MySQL必知必会学习笔记_第12张图片
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uzAZzOnd-1583773547358)(assets/1583772674648.png)]

5.2 按照多个列排列

输入:SELECT cate_id, price FROM goods ORDER BY cate_id, price;

多个列名之间用逗号隔开。仅在多个行具有相同的cate_id值时才对产品按price进行排序。如果cate_id列中所有的值都是不同的,则不会按照price排序。

MySQL必知必会学习笔记_第13张图片

5.3 指定排序方向

降序排序,用DESC**关键字

输入:SELECT cate_id, price FROM goods ORDER BY price DESC;

在多个列上降序排序 如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。
MySQL必知必会学习笔记_第14张图片

1.与DESC相反的关键字是ASC(ASCENDING),默认升序,用不到ASC。

2.大小写例如A和a排序,取决于数据库如何设置。

5.4 ORDER BY和LIMIT的组合

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

输入:SELECT price FROM goods ORDER BY price LIMIT 1;
MySQL必知必会学习笔记_第15张图片

RDER BY子句的位置 在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。

六、过滤数据

6.1使用WHERE子句

输入:SELECT name, price FROM goods where price=99;

MySQL必知必会学习笔记_第16张图片

在同时使用ORDER BY 和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将产生错误。
MySQL必知必会学习笔记_第17张图片

6.2WHERE字句操作符

MySQL必知必会学习笔记_第18张图片

检查单个值,MySQL在执行匹配时默认不区分大小写

MySQL必知必会学习笔记_第19张图片

过滤条件WHERE子句小于(<)和不等于(<>或!=)

MySQL必知必会学习笔记_第20张图片
MySQL必知必会学习笔记_第21张图片

范围值检查,使用BETWEEN AND

**输入:**SELECT name, price FROM goods WHERE price BETWEEN 5000 AND 10000;

MySQL必知必会学习笔记_第22张图片

空值检查,IS NULL

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

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

SELECT name FROM goods WHERE price IS NULL;
MySQL必知必会学习笔记_第23张图片

七、数据过滤

7.1组合WHERE子句

操作符(逻辑操作符): AND 和 OR

AND操作符SELECT name, price cate_id FROM goods WHERE cate_id=1 AND price>3000;

MySQL必知必会学习笔记_第24张图片

检索cate_id为1,并且价格大于3000的商品。

OR操作符SELECT name, price FROM goods where goods price=99 OR price=6888;

MySQL必知必会学习笔记_第25张图片

检索匹配任一条件就行。

计算次序:AND优先级大于OR

使用AND和OR操作符的WHERE子句,应该使用()明确的分组操作,消除歧义,不要依赖默认的计算次序。

SELECT name,price,cate_id FROM goods WHERE (cate_id=1 OR cate_id=2) AND price>3000;

MySQL必知必会学习笔记_第26张图片

操作符:IN

IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。当选项较多时,IN比OR更容易管理,且执行更快。

SELECT name, price, cate_id FROM goods WHERE cate_id IN (1, 2, 3);

MySQL必知必会学习笔记_第27张图片

操作符:NOT

在WHERE子句中的NOT操作符有且只有一个功能,就是否认它之后所跟的任何条件。NOT可以对IN, BETWEEN和EXISTS子句取反

SELECT name, price, cate_id FROM goods WHERE cate_id NOT IN (1, 2, 3);

MySQL必知必会学习笔记_第28张图片

你可能感兴趣的:(数据库)