MySQL初识
1.理论体系
1.1数据库
数据库(DataBase),是存储和管理数据的仓库
1.2数据库管理系统
数据建库管理系统(DataBase Management Systerm),是操纵和管理数据库的大型软件
1.3SQL
SQL(Structured Query Language),是操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准
1.3.1SQL语法
可单行可多行
不区分大小写
可以加空格更美观
单行注释 --或#
多行注释 /**/
1.3.3SQL分类
DDL(Data Definition Language)操作数据库,表和表中的字段
DML(Data manipulation Language)对表中的数据增删改(没有查)
DQL(Data QueryLanguage)对表中的数据进行查询
DCL(Data Cotrol Language)权限相关
1.4关系型数据库
关系型数据库(RDBMS),建立在关系模型的基础上,有多张二维表组成的相互连接在一起而组成的数据库
常见的有orcle,mysql,sqlserver等
1.5MySQL数据库
mysql可以管理多个数据库
数据库本质上文件夹,可以管理多张数据表
数据表本质上是个文件,可以管理多条数据记录
2.约束
约束是作用在字段上的规则,用来限制表中的数据
约束的类型 | 含义 | 关键字 |
---|---|---|
非空约束 | 不为null | not nul |
唯一约束 | 唯一不重复 | unique |
主键约束 | 一行数据中唯一标识,非空且唯一 | primary key |
默认约束 | 未指定字段类型则为默认 | default |
外键约束 | 让两张表建立连接(物理外键) | foreign key |
3.数据类型
常用数据类型如下:
3.1整数类
数值类 | 字节大小 | 含义 |
---|---|---|
tinyint | 1 | 小整数 |
int | 4 | 大整数 |
float | 4 | 单精度浮点数 |
double | 8 | 双精度浮点数 |
3.2字符串类型
字符类 | 字节大小 | 含义 |
---|---|---|
char | 1 | 定长字符串(需要指定长度) |
varchar | 2 | 变长字符串(需要指定长度) |
3.3日期类型
日期类 | 字节大小 | 格式 | 含义 |
---|---|---|---|
date | 3 | yyyy-MM-dd | 日期值 |
datetime | 8 | yyyy-MM-dd HH:mm:ss | 混合日期和时间值 |
4.数据库的设计(DDL)
4.1操作库
-- 展示数据库
show databases ;
-- 展示当前数据库
select database();
-- 使用db01数据库
use 库名;
-- 建库
create database [if not exists] 库名;
-- 删库
drop database [if exists] 库名;
4.2操作表
-- 建表
create table 表名 (
字段名1 字段类型 [约束] [comment 字段名1注释],
字段名2 字段类型 [约束] [comment 字段名2注释]
)[comment 注释];
-- 查询所有表
show tables;
-- 查询表结构
desc 表名;
-- 查询建表语句
show create table 表名;
-- 添加字段
alter table 表名 add 字段名 字段类型 [comment 注释];
-- 修改字段类型
alter table 表名 modify 字段名 新字段类型;
-- 修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 新字段类型 [comment 注释] ;
-- 删除字段
alter table 表名 drop column 字段名;
-- 修改表名
rename table 旧表名 to 新表名;
-- 删表
drop table 表名;
5.数据库的操作
5.1DML
5.1.1增
-- 指定字段添加数据
insert into 表名(部分字段列表) values(部分值列表);
-- 全部字段添加数据、
insert into 表名(全部字段列表) values(全部值列表);
-- 批量指定字段添加数据
insert into 表名(部分字段列表) values(部分值列表1),(部分值列表2);
-- 批量全部字段添加数据
insert into 表名(全部字段列表) values(全部值列表1),(全部值列表2);
5.1.2删
delete from 表名 [where 条件];
5.1.3改
update 表名 set 字段1 = 值1,字段2 = 值2 ... [where 条件];
5.2DQL
5.2.1基本查询
-- 查询多个字段(比使用*更快,更直观)
select 字段名1,字段名2 from 表名;
-- 查询所有字段(不直观影响效率)
select * from 表名;
-- 设置别名
select 字段名1[as 别名1],字段2[as 别名2] from 表名 ;
-- 别名中的as可以省略
select 字段名1 别名1,字段2 别名2 from 表名 ;
-- 注意点,如果别名中有空格,别名必须用''引起来
select name '姓 名' from 表名;
-- 去除重复记录
select distinct 字段列表 from 表名;
5.2.2条件查询
-- 条件查询语法
select 字段列表 from 表名 where 条件列表
条件查询中,where后的条件列表中常用的运算符:
比较运算符 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
<> 或 != | 不等于 |
between … and … | 在某范围内(包括最大最小值) |
in ( … ) | 在in之后的列表中的值中,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配多个字符 |
is null | 是 空 |
is not null | 不是 空 |
MySQL语言在使用逻辑运算符时,推荐使用单词
逻辑运算符 | 功能 |
---|---|
and 或 && | 与 |
or 或 | |
not 或 ! | 非 |
5.2.3分组查询
聚合函数
聚合函数,将一列数据作为整体,进行纵向运算
-- 聚合函数的使用
select 聚合函数(字段列表) from 表名;
聚合函数 | 功能 |
---|---|
count() | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
count可以使用count(*),count(字段),count(常量),推荐使用count(*)
分组查询语法
-- 分组查询语法
select 字段列表 from 表名 [where 条件列表] group by 分组字段名 [having 分组后的过滤条件]
执行顺序:
- where 过滤 决定哪些数据可以参与分组
- group by 分组
- select 查询 指定的内容可以查询出来
- having 过滤 决定哪些数据可以查询出来
注意点!!!
- 在分组查询后只能查询聚合函数和分组字段
如:对性别进行分组查询后,字段列表里只能查询姓别字段或性别字段的聚合函数
5.2.4排序查询
-- 排序查询语法
select 字段列表 from 表名 [where 条件列表] [group by 分组字段 [having 分组后的过滤条件] ] order by 字段1 排序方式, 字段2 排序方式2
排序方式
- Asc 升序(默认)
- Desc 降序
注意点!!!
- 如果多个字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
5.2.5分页查询
-- 分页查询语法
select 字段列表 from 表名 [where 条件列表] limit 起始索引,每页展示的记录数;
起始索引的计算:
- 起始索引 = (当前页 - 1)* 每页展示的记录数
注意点!!!
- 分页查询不同数据库有不同的实现,limit是MySQL特有的
- 索引超过范围不报错,只是没有结果展示
- 查询第一页起始索引可以省略