MySQL 基础 ---- MYSQL 必知必会的阅读一
一、了解 SQL
1.数据库
① 一个以某种有组织的方式存储的数据集合
② 通常是一个文件或一组文件
2. 表
① 某种特定类型数据的结构化清单
②具有唯一的表名
③同一个数据库中没有其他表具有相同的名字
④模式
- 关于数据库和表的布局及特性的信息
引自CSDN:我们可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table就被放入每个房间中,不能放置在房间之外。然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样。所以Schema包含的是Object,而不是User。
3.列和数据类型
① 列
- 表中的一个字段。
- 所有表都由一个或多个列组成
- 有相应的数据类型
②数据类型
- 所容许的数据类型
- 可限制存储在列中的数据种类帮助正确排序数据
- 帮助正确排序数据
- 对优化磁盘起重要作用
4.行
① 表中的一个记录
② 表中数据按行存储,所保存的每个记录存储在自己的行内
③ 如若表为网格
- 垂直列为表列
- 水平行为表行
5. 主键
① 一列或一组列,其值能够唯一区分表中每一行
① 表示一个特定的行。
② 使用条件
- 任意两行都不具有相同的主键值
- 每一行都必须具有一个主键值(主键列不允许NULL值)
② 多列主键
- 满足上溯述条件
- 所有列值的组合必须是唯一的(但单个列值可以不唯一)
② 使用习惯
- 不更新主键列的值
- 不重用主键列的值
- 不在主键列中使用可能会更改的值
三、使用MySQL
1.选择数据库
① 关键字(key word)
- 作为 MySQL 语言组成部分的一个保留字
- 不能用关键字命名一个表或列
② USE关键字
- 选择数据库
- 不返回任何结果
USE + 数据库名
- 必须先用 USE 打开数据库,才能读取其中的数据
2.数据库和表
① SHOW 命令
- 显示数据库、表、列、用户、权限等信息
- MySQL 从内部表提取信息
② SHOW DATABASES;
- 返回可用数据库的一个列表
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2f59f2e-1649052537713)(C:\Users\18517\AppData\Roaming\Typora\typora-user-images\image-20220404134536273.png)]
③SHOW TABLES;
- 返回当前选择的数据库内可用表的列表
④SHOW
- 可用来显示表列
- SHOW COLUMNS
-
- 要求给出一个表名
- 如
SHOW COLUMNS FROM customers;
- 对每个字段所有一行
- 行中包括字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息
- DESCRIBE 语句
-
- SHOW COLUMNS FROM 的快捷方式
DESCRIBE customers; == SHOW COLUMNS FROM customers;
⑤OW STATUS;
显示广泛的服务器状态信息
⑥HOW CREATE DATABASE/TABLE;
分别用来创建特定数据库或表
⑦OW GRANTS;
用来显示授予用户(所有用户或特定用户)的安全权限
⑧HOW ERRORS/WARNINGS;
用来显示服务器错误或警告消息
⑨INFORMA-TION_SCHEMA
获得和过滤模式信息
⑩ELP SHOW;
显示允许的 SHOW 语句
四、检索数据
1.SELECT 语句
① 从一个或多个表中检索信息
② 使用 SELECT 必须给出两个信息
- 想选择什么
- 从什么地方选择
2. 检索单个列
① 语法
SELECT 列名 FROM 表名
②输出结果
- 输出的数据没有明确的排序
- 返回表中所有的行
3.检索多个列
SELECT 列名,列名 FROM 表名
4.检索所有列
① 语法
- 使用星号(*)通配符
SELECT * FROM 表名;
② 好处以及建议
- 可以检索出名字未知的列
- 一般最好不要使用 * 通配符,会降低检索和应用程序的性能
5. 检索不同的行
① 语法
- DISTINCT 关键字 ---- 只返回不同的值
SELECT DISTINCT 列名 FROM 表名;
② 不能部分使用 DISTINCT
DISTINCT 关键字应用于所有列而不仅是前置它的列。如果给出 SELECT DISTINCTvend_id, prod_price,除非指定的两个列都不同,否则所有行都将被检索出来。
6.限制结果
① 语法
- **LIMIT ** 子句 ---- 返回第一行或前几行
- LIMIT 起始行序数,返回的行数
- eg1
-
SELECT 列名 FROM 表名 LIMIT 3,4;
- 返回从行3开始的4行
- 3 — 开始位置 ------ 行数也指下标序号,从0开始
- 4 — 检索的行数
- eg2
-
SELECT 列名 FROM 表名 LIMIT 5;
- 返回不多于5行
- 即从第0行开始
② 检索的行数超过已有的行数时
LIMIT中指定要检索的行数为检索的最大行数。如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行), MySQL将只返回它能返回的那么多行。不会报错。
③ IT 的替代语法
LIMIT 4 OFFEST 3
等同于 LIMIT 3,4
7.完全限定列名表名
用以区分不同数据库相同表名,以免出错
eg:
SELECT products.prod_name
FROM crashcource.products;
五、排序检索数据
1. 排序数据
① ORDER BY 子句
- 取一个列或多个列的名字
- 据此对输出进行排序
- 位于 FROM 子句之后
子句:通常由一个关键字和所提供的数据组成
② eg:
SELECT prod_name
FROM products
ORDER BY prod_name;
2. 按多个列排序
① 使用语法
- 指定列名,列名之间用逗号分开
- 顺序即为语句中列名的顺序
② eg:
SELECT prod_name , prod_price
FROM products
- ``WHERE prod_price = 2.50 ;`
- 仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序
3. 指定排序方向
① 降序排序
-
DESC 关键字 — 只应用到位于其前面的列名
-
eg:
-
-
SELECT prod_name
FROM products
ORDER BY prod_name DESC;
-
② 升序排序
- ASC 关键字
- 升序排序是默认的
② 多个列排序
-
若想对多个列进行降序排序,必须对每个列指定 DESC关键字
-
eg — 只对 prod_price 列以降序排序
-
-
SELECT prod_name
FROM products
ORDER BY prod_name DESC prod_name;
-
③大小写区分排序
默认 A 和a等同
④ 获取列的最值
在 ORDER BY 子句最后加入 LIMIT 1;
六、过滤数据
(一)、 使用 WHERE 子句
1. 搜索条件 == 过滤条件
只检索所需要的数据需要指定的搜索条件
2. WHERE 子句
-
根据WHERE子句中指定的搜索条件进行过滤
-
WHERE 子句在表名(FROM 子句)之后给出
-
WHERE 子句在 ORDER BY 子句之前,否则会报错
-
eg:----- 相等测试
-
-
代码块
-
SELECT prod_name , prod_price
-
FROM products
-
WHERE prod_price = 2.50 ;
-
只检索两个列,不返回所有行,只返回 prod_price 值为 2.50 的
-
(二)、WHERE 子句操作符
1. WHERE 子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
2. 检查单个值
(1) MySQL执行匹配时默认不区分大小写
- eg:‘fuses’ 与 ‘Fuses’ 匹配
(2) 不匹配检查
- 操作符 : <> , !=
- 输出不等于所给值的数据
- 引号的使用
-
- 单引号限定字符串
- 字符串类型的列需要使用限定引号
- 数值类则不用
(3) 范围值检查
- BETWEEN 操作符
- 语法 : BETWEEN 开始值 AND 结束值
- BETWEEN 匹配范围中所有值,包括指定的开始值和结束值
(4) 空值检查
- NUll 无值。与字段包含0、空字符串或仅仅包含空格不同
- 检查具有 NULL 值的列 — **IS NULL ** 子句
在过滤数据时,一定要验证返回数据中确实给出了被过滤列具有 NULL 的行