一、MySQL概述
MySQL是一个关系型数据库管理系统,内部管理着关系型数据库。关系型数据库是由多张表组成的数据库。
关系型数据库具有以下优点:
- 使用表结构,格式一致,易于维护
- 使用通用的SQL进行操作,学习成本低,通用性强,也可用于复杂的查询
- 数据存储在磁盘中,安全
MySQL是一个开源的关系型数据库管理软件,也有用于商业的付费版本。MySQL创建数据库服务器,包含数据库管理系统,数据库。数据库管理系统管理数据库,数据库中又存在着数据表,表中存储着数据。
二、SQL
Structured Query Language,结构化查询语言,是操作关系型数据库的标准语言,但是对于不同的数据库操作可能存在一些差异。
2.1 通用语法
1、SQL语句可以单行可以多行,以分号结尾。没有以分号结尾的多行实际会被看做一行语句。
2、SQL语句不区分大小写,关键词建议大写
3、注释
- 单行注释
– 注释内容,或#注释内容(MySQL特有)
需注意的是–添加单行注释的时候后面必须有一个空格,#则没这要求 - 多行注释
/注释/
2.2 SQL分类
- DDL(Data Definition Language):数据定义语言,用于定义大户局库对象,可理解为操作数据库和数据表。
- DML(Data Manipulation Language):数据操作语言,对数据表中的数据进行增删改。
- DQL(Data Query Language):数据查询语言,查询数据表中数据。
- DCL(Data Control Language):数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。
2.3 数据类型
MySQL支持多种数据类型,可以分为三类:
1、数值型
tinyint:小整型,占一个字节
int:大整型,占四个字节
double:浮点类型(总长度,小数点后保留的位数)
2、日期
date:日期值,只包含年月日
datetime:混合日期和事件,包含日月日时分秒
3、字符串
char:定长字符段,长度固定。优点是存储性能高,缺点是浪费空间,可能固定长度未用完。
varchar:边长字符串,根据字符数来定。优点是节约空间,当小于设定值时,根据实际的字长确定,缺点是性能低。
2.4 DDL语句
2.4.1 DDL操作数据库
1、 查询
查询所有的数据库
SHOW DATABASES;
2、创建数据库
CREATE DATABASE 数据库名称;
如果所创建的数据库已经存在,则会报错。
可以使用带判断的创建,如果该数据库不存在则创建。
CREATE DATABASE IF NOT EXISTS 数据库名称;
3、删除数据库
DROP DATABASE 数据库名称;
和创建数据库相同的问题,如果数据库不存在,则会报错。
处理方法也相同,在删除之前进行判断。
DROP DATABASE IF EXISTS 数据库名称;
4、使用数据库
使用数据库,使用后才能对数据库进行操作,如增删改查。
USE 数据库名称;
可以使用以下语言查看当前使用的数据库
SELECT DATABASE();
database()是一个内置函数。
2.4.2 DDL操作表
1、查询表
查询当前数据库下所有的表的名称
SHOW TABLES;
2、查询表结构
DESC 表名称;
表结构会显示表中的字段和数据类型等信息。
3、创建表
CREATE TABLE 表名 (
字段1 数据类型1,
字段2 数据类型2,
字段3 数据类型3
)
需要注意的是最后一个字段没有逗号,有会报错。
4、删除表
DROP TABLE 表名;
判断表是否存在再删除表
DROP TABLE IF EXISTS 表名;
5、修改表
- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
- 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
- 修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
- 修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
- 删除列
ALTER TABLE 表名 DROP 列名;
2.5 DML语句
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,...)...;
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...)...;
2.5.2 修改数据
1、修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,... [WHERE 条件];
如果不加条件的话,会修改表中所有数据。
2.5.3 删除数据
DELETE FROM 表名 [WHERE 条件];
2.6 DQL语句
2.6.1 查询完整语句
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页字段
2.6.2 基础查询
查询多个字段
SELECT 字段列表 FROM 表名; --查询多个字段,不同字段用逗号隔开
SELECT * FROM 表名; --查询所有数据
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
起别名
AS: AS 也可以省略
2.6.3 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
符号 | 功能 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<>或!= | 不等于 |
BETWEEN…AND… | 在某个范围之内 |
IN(…) | 多个条件符合其中一个 |
LIKE 占位符 | 模糊查询,_单个字符,%多个字符 |
IS NULL | 为Null |
IS NOT NULL | 不为Null |
AND或&& | 与 |
OR或|| | 或 |
NOT或! | 非 |
2.6.4 排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
排序方式有两种:
- ASC:升序排序
- DESC:降序排列
如果有多个排序条件,只有前一个条件一样时,才会根据后面的进行排序。
2.6.5 聚合函数
聚合函数将一列数据作为一个整体进行纵向的计算。
函数名 | 功能 |
count(列名) | 统计数量,为null的不统计 |
max(列名) | 一列中最大值 |
min(列名) | 一列中最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
SELECT 聚合函数名(列名) FROM 表;
注意:NULL值不参与所有聚合函数的运算
2.6.6 分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where 和 having 区别:
- 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
- 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
2.6.7 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
从上面的练习推导出起始索引计算公式:
起始索引 = (当前页码 - 1) * 每页显示的条数