MySQL基础
关系型数据库
数据模型
数据类型
查询表
创建表
删除表
创建表
图形化客户端工具
添加数据
修改数据
删除数据
查询语法
修改数据
条件查询
排序查询
聚合函数
分组查询
分页查询
1、数据库相关概念
1.1 数据库
- 存储数据的仓库,数据是有组织的进行存储
- 英文:DataBase,简称DB
1.2 数据库管理系统
- 数据库的大型管理软件
- 英文:DataBase Management System,简称DBMS
1.3 SQL
- 英文:Structured Query Language,简称SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
1.4 常见的关系型数据库管理系统

- Oracle:收费的大型数据,Oracle公司的产品
- MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Sun公司又被Oracle收购
- SQL Server:MicroSoft公司收费的中型的数据库。C#、.net等语言常用
- PostgreSQL:开源免费中小型数据库
- DB2:IBM公司的大型收费数据库产品
- SQLite:嵌入式数据库,如:作为Android内置数据库
- MariaDB:开源免费中小型的数据库
2、MySQL数据库
2.1 MySQL安装
2.2 MySQL数据模型
关系型数据库
关系型数据库是由多张能相互连接的二维表组成的数据库。
- 优点:
-
- 都是使用表结构,格式一致,易于维护
- 使用通用的SQL语言操作,使用方便,可用于复杂查询
- 数据存储在磁盘中,安全。
数据模型

3、SQL
3.1 SQL简介
- 英文:Structured Query Language,结构化查询语言,简称SQL
3.2 SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释
-
- 单行注释:-- 注释内容 或 #注释内容(mysql特有)
- 多行注释:/*注释*/
3.3 SQL分类
- DDL(Data Definition Language):数据定义语言,用来定义数据库对象:数据库、表、列等
- DML(Data Manipulation Language):数据操作语言,对表中的数据进行增删改查
- DQL(Data Query Language):数据查询语言,对表中的数据进行查询
- DCL(Data Control Language):数据控制语言,对数据库进行权限控制
3.4 DDL
- 操作数据库
-
- 查询:
show databases; - 创建:
- 创建数据库:
create database 数据库名称; - 创建数据库(判断,如果不存在则创建):
create database if not exists 数据库名称;
- 创建数据库:
- 删除:
- 删除数据库:
drop database 数据库名称; - 删除数据库(判断,如果数据库存在):
drop database if exists 数据库名称;
- 删除数据库:
- 使用数据库
- 查看当前使用的数据库:
select database(); - 使用数据库:
use 数据库名;
- 查看当前使用的数据库:
- 查询:
- 操作表
- 创建(Create)
- 查询(Select)
- 修改(Update)
- 删除(Delete)
查询表
- 查询当前数据库下所有表名称
show tables;
- 查询表结构
desc 表名称;
创建表
create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
...
字段名n 数据类型n
);
注意:最后一行末尾,不能加逗号。
数据类型
- MySQL支持多种类型,可以分为三类:
- 数值
- 日期
- 字符串

案例
需求:设计一张表学生表,请注重数据类型、长度的合理性
1. 编号
2. 姓名,姓名最长不超过10个汉字
3. 性别,因为取值只有两种可能,因此最多一个汉字
4. 生日,取值为年月日
5. 入学成绩,小数点后保留两位
6. 邮件地址,最大长度不超过 64
7. 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
8. 学生状态(用数字表示,正常、休学、毕业...)
create table student(
id int,
name varchar(10),
gender char(1),
birthday date,
score double(5,2),
email varchar(64),
address varchar(15),
status tinyint
);
删除表
- 删除表:
drop table 表名; - 删除表是否存在:
drop table if exists 表名;
修改表
- 修改表名:
alter table 表名 rename to 新的表名; - 添加一列:
alter table 表名 add 列名 数据类型; - 修改数据类型:
alter table 表名 modify 列名 新的数据类型; - 修改列名和数据类型:
alter table 表名 change 列名 新列名 新的数据类型; - 删除列名:
alter table 表名 drop 列名;
图形化客户端工具

3.5 DML
添加数据
1. 给指定列添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,...);
2. 给全部列添加数据
insert into 表名 values(值1,值2,...);
3. 批量添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,...),(值1,值2,...),...;
insert into 表名 values(值1,值2,...),(值1,值2,...),...;
修改数据
1. 修改表数据
update 表名 set 列名1=值1,列名2=值2,... [where 条件];
注意:修改语句中如果不加条件,则所有数据都要修改!
删除数据
1. 删除数据
delete from stu where 条件;
注意:删除语句中如果不加条件,则将所有数据都删除。
3.6 DQL
查询语法
- 基础查询
- 条件查询(where)
- 分组查询(Group by)
- 排序查询(order by)
- 分页查询(limit)
select
字段列表
from
表名列表
where
条件列表
group by
分组查询
having
分组后条件
order by
排序字段
limit
分页限定
基础查询
1. 查询多个字段
select 字段列表 from 表名;
select * from 表名; -- 查询所有数据
2. 去除重复记录
selct distinct 字段列表 from 表名;
3. 取别名
as:as 也可以省略
条件查询
1. 条件查询语法
select 字段列表 from 表名 where 条件列表;
2. 条件

3. 条件查询练习
-- 1.查询年龄大于20岁的学员信息
select * from stu where age > 20;
-- 2.查询年龄大于等于20岁的学员信息
select * from stu where age >= 20;
-- 3.查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
select * from stu where age >= 20 and age <= 30;
select * from stu where age between 20 and 30;
-- 4.查询入学日期在'1998-09-01' 到 '1999-09-01' 之间的学员信息
select * from stu where hire_date between '1998-09-01' and '1999-09-01';
-- 5.查询年龄等于18岁的学员信息
select * from stu where age = 18;
-- 6.查询年龄不等于18岁的学员信息
select * from stu where age != 18;
select * from stu where age <> 18;
-- 7.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息
select * from stu where age in(18,20,22);
select * from stu where age = 18 or age = 20 or age = 22;
-- 8.查询英语成绩为 null的学员信息
select * from stu where english is null;
4. 模糊查询练习
模糊查询使用like关键字,可以使用通配符进行占位:
(1)_ : 代表单个任意字符
(2)% : 代表任意个数字符
-- 1.查询姓'马'的学员信息
select * from stu where name like '马%';
-- 2.查询第二个字是'花'的学员信息
select * from stu where name like '_花%';
-- 3.查询名字中包含 '德' 的学员信息
select * from stu where name like '%德%';
排序查询
1. 排序查询语法
select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段2 [排序方式2] ...;
2. 排序方式
-
- ASC:升序排列(默认值)
- DESC:降序排列
注意:如果有多个排序条件,当前边的条件之一样时,才会根据第二个条件进行排序。
-- 1.查询学生信息,按照年龄升序排列
select * from stu order by age asc;
-- 2.查询学生信息,按照数学成绩降序排列
select * from stu order by math desc;
-- 3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc,english asc;
聚合函数
1. 概念:
将一列数据作为一个整体,进行纵向计算。
2. 聚合函数分类

3. 聚合函数语法:
select 聚合函数名(列名) from 表;
注意:null值不参与所有聚合函数运算。
-- 1.统计班级一共有多少个学生
select count(id) from stu;
-- 2.查询数学成绩的最高分
select max(math) from stu;
-- 3.查询数学成绩的最低分
select min(math) from stu;
-- 4.查询数学成绩的总分
select sum(math) from stu;
-- 5.查询数学成绩的平均分
select avg(math) from stu;
-- 6.查询英语成绩的最低分
select min(english) from stu;
分组查询
1. 语法
select 字段列表 from 表名 where 分组前条件限定 group by 分组字段名 [having 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。
2. where 和having区别
-
- 执行时机不一样,where是分组之前进行限定,不满足where条件,则不参与分组,二having是分组之后对结果进行过滤。
- 可判断的条件不一样:where不能对聚合函数进行判断,having可以。
3. 执行顺序
where > 聚合函数 > having
select * from stu;
-- 1.查询男同学和女同学各自的数学平均分
select sex,AVG(math) from stu group by sex;
-- 2.查询男同学和女同学各自的数学平均分,以及各自人数
select sex,avg(math),COUNT(id) from stu group by sex;
-- 3.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex,avg(math),COUNT(id) from stu where math > 70 group by sex;
-- 4.查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
select sex,avg(math),COUNT(id) from stu where math > 70 group by sex having count(id) > 2;
分页查询
1. 分页查询语法
select 字段列表 from 表名 limit 起始索引,查询条目数;
2. tips
-
- 分页查询limit是MySQL数据库的方言
- Oracle分页查询使用rownumber
- SQL Server分页查询使用top
-- 1.从0开始查询,查询3条数据
select * from stu limit 0,3;
-- 2.每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
-- 3.每页显示3条数据,查询第2页数据
select * from stu limit 3,3;
-- 4.每页显示3条数据,查询第3页数据
select * from stu limit 6,3;

浙公网安备 33010602011771号