1. MySQL概述
在这一章节,我们主要介绍两个部分,数据库相关概念及MySQL数据库的介绍、下载、安装、启动及连 接。
1.1 数据库相关概念
在这一部分,我们先来讲解三个概念:数据库、数据库管理系统、SQL。
2.1 SQL通用语法
在学习具体的SQL语句之前,先来了解一下SQL语言的同于语法。
1). SQL语句可以单行或多行书写,以分号结尾。
2). SQL语句可以使用空格/缩进来增强语句的可读性。
3). MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4). 注释: 单行注释:-- 注释内容 或 # 注释内容 多行注释:/* 注释内容 */
2.2 SQL分类
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。
分类 | 全称 | 说明 |
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表, 字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的 访问权限 |
2.3 DDL
Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。
2.3.1 数据库操作
1). 查询所有数据
show database;
2). 查询当前数据库
select database;
3). 创建数据库
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]
4). 删除数据库
drop database [ if exists ] 数据库名 ;
如果删除一个不存在的数据库,将会报错。此时,可以加上参数 if exists ,如果数据库存在,再 执行删除,否则不执行删除。
5). 切换数据库
use 数据库名;
我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则是不能操作的。
2.3.2 表操作
2.3.2.1 表操作-查询创建
1). 查询当前数据库所有表
show tables;
2). 查看指定表结构
desc 表名 ;
通过这条指令,我们可以查看到指定表的字段,字段的类型、是否可以为NULL,是否存在默认值等信 息
3). 查询指定表的建表语句
show create table 表名 ;
通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询 到,因为这部分是数据库的默认值,如:存储引擎、字符集等。
4). 创建表结构
cREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ],
字段2 字段2类型 [COMMENT 字段2注释 ],
字段3 字段3类型 [COMMENT 字段3注释 ],
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
2.3.2.2 表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
1). 数值类型
TINYINT,
SMALLINT,
MEDIUMINT,
INT/INTEGER,
BIGINT,
FLOAT,
DOUBLE,
DECIMAL
2). 字符串类型
CHAR,
VARCHAR,
TINYBLOB,
TINYTEXT,
BLOB,
TEXT,
MEDIUMBLOB,
MEDIUMTEXT,
LONGBLOB,
LONGTEXT
3). 日期时间类型
DATE,
TIME,
YEAR,
DATETIME,
TIMESTAMP
2.5 DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进 行增、删、改操作。
- 添加数据(INSERT)
- 修改数据(UPDATE)
- 删除数据(DELETE)
2.5.1 添加数据
1). 给指定字段添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
2). 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
3). 批量添加数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值
1, 值2, ...) ;
2.5.2 修改数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
2.5.3 删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;
2.6 DQL
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记 录。
查询关键字: SELECT
在一个正常的业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站, 在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能 还会涉及到条件、排序、分页等操作。
2.6.1 基本语法
DQL 查询语句,语法结构如下:
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
我们在讲解这部分内容的时候,会将上面的完整语法进行拆分,分为以下几个部分:
- 基本查询(不带任何条件)
- 条件查询(WHERE)
- 聚合函数(count、max、min、avg、sum)
- 分组查询(group by)
- 排序查询(order by)
- 分页查询(limit)
2.6.2 基础查询
在基本查询的DQL语句中,不带任何的查询条件,查询的语法如下:
1). 查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT * FROM 表名 ;
注意 : * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。
2). 字段设置别名
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
注意:AS可以取消
3). 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
2.6.3 条件查询
1). 语法
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
2). 条件 常用的比较运算符如下:
比较运算符 | 功能 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> ,!= | 不等于 |
between...and | 在某个范围之内 |
in(...) | 在in之后的列表中的值,多选一 |
like | 模糊匹配(_匹配单个字符,%匹配多个字符) |
is null | 是null |
2.6.4 聚合函数
1). 介绍
将一列数据作为一个整体,进行纵向计算 。
2). 常见的聚合函数
函数 | 功能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
注意 : NULL值是不参与所有聚合函数运算的。
2.6.5 分组查询
1). 语法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组
后过滤条件 ];
2). where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
注意事项:
• 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
• 执行顺序: where > 聚合函数 > having 。
• 支持多字段分组, 具体语法为 : group by columnA,columnB
2.6.6 排序查询
排序在日常开发中是非常常见的一个操作,有升序排序,也有降序排序。
1). 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
2). 排序方式
ASC : 升序(默认值)
DESC: 降序
注意事项:
• 如果是升序, 可以不指定排序方式ASC ;
• 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序 ;
2.6.7 分页查询
分页操作在业务系统开发时,也是非常常见的一个功能,我们在网站中看到的各种各样的分页条,后台 都需要借助于数据库的分页操作。
1). 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
2.6.8 执行顺序
我们已经讲解了DQL语句的完整语法,及编写顺序,接下来,我们要 来说明的是DQL语句在执行时的执行顺序,也就是先执行那一部分,后执行那一部分。
select 字段列表 4 from 表面列表 1 where 条件列表 2 group by 分子字段列表 3 having 分组后条件列表 group by 排序字段列表 5 limit 分页参数 6
2.7 DCL
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访 问权限。
2.7.1 管理用户
1). 查询用户
select * from mysql.user;
2). 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
3). 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
4). 删除用户
DROP USER '用户名'@'主机名' ;
2.7.2 权限控制
MySQL中定义了很多种权限,但是常用的就以下几种:
权限 | 说明 |
ALL, ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 传教数据库/表 |
1). 查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;
2). 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
3). 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';