概述
数据库 : 存储和管理数据的仓库,数据是有组织的进行存储
数据库管理系统 : 管理数据库的大型软件
SQL :
- 英文:Structured Query Language,简称 SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其他的数据库管理系统,也同样的使用SQL来操作。
DDL
-- 操作数据库
-- 创建数据库的语句
create database if not exists 数据库名称;
-- 删除数据库的语句
drop database if exists 数据库名称;
-- 查询所有数据库名称
show database;
-- 使用指定名称的数据库语句
use 数据库名称;
-- 操作表
-- 查询当前数据库下所有表的名称
show tables;
-- 查询指定表的结构的语句
desc 表名;
-- 创建表
create table 表名(
字段名1 字段类型1,
字段名2 字段类型2
)
-- 删除表
drop table if exists 表名;
-- 修改表结构
-- 修改表名
alter table 表名 rename to 新的表名;
-- 添加一列
alter table 表名 add 列名 数据类型;
-- 修改数据类型
alter table 表名 modify 列名 新数据类型;
-- 修改列名和数据类型
alter table 表名 change 类名 新列名 新数据类型;
-- 删除一列
alter table 表名 drop 列名;
DML
-- 添加数据
-- 给指定列添加数据
insert into 表名(列名1,列名2,…) values (值1,值2,…);
-- 给所有列添加数据,列名的列表可以省略
insert into 表名 values(值1,值2,…);
-- 批量添加数据
insert into 表名(列名1,列名2,…) values(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
insert into 表名 values(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
--修改表数据
update 表名 set 列名1=值1,列名2=值2,… [where 条件] ;
-- 删除数据
delete from 表名 [where 条件] ;
DQL
-- 基础查询
-- 查询指定列
select 字段列表 from 表名;
-- 查询所有列的数据,列名的列表可以使用*
select * from 表名;
-- 去除重复记录
select distinct 字段列表 from 表名;
-- 起别名
select 列名 as 别名 from 表名;
-- as可以省略,但是必须使用空格隔开
select 列名 别名 from 表名;
-- 条件查询
select 字段列表 from 表名 where 条件列表;
-- 查询英语成绩为 null的学员信息
-- null值的比较不能使用 = 或者 != 。需要使用 is 或者 is not
-- select * from stu where english = null; 错误的
select * from stu where english is null;
select * from stu where english is not null;
-- 条件查询的模糊查询 like
/*
通配符:
(1)_:代表单个任意字符
(2)%:代表任意个数字符
*/ -- 1. 查询姓'马'的学员信息
select * from stu where name like '马%';
-- 2. 查询第二个字是'花'的学员信息
select * from stu where name like '_花%';
-- 3. 查询名字中包含 '德' 的学员信息
select * from stu where name like '%德%';
-- 排序查询
-- select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
-- 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;
-- 聚合函数
/*
count(列名) : 统计某一列满足条件的数量
max(列名) : 求某一列的最大值
min(列名) : 求某一列的最小值
sum(列名) : 求某一列的数据值和
avg(列名) : 求某一列的数据的平均值
格式: select 聚合函数名(列名) from 表名;
*/ -- 统计班级一共有多少个学生
select count(*) from stu;
-- 统计个数时,推荐使用count(*)
-- 查询数学成绩的最高分
select max(math) from stu;
-- 查询数学成绩的最低分
select min(math) from stu;
-- 查询数学成绩的总分
select sum(math) from stu;
-- 查询数学成绩的平均分
select avg(math) from stu;
-- 查询英语成绩的最低分
select min(english) from stu;
-- null值不参与所有聚合函数的运算
-- 分组查询 group by
-- select 字段列表 from 表名 where 分组前条件限定 group by 分组字段名 having 分组后条件过滤
/* where和having的区别
where在分组之前的条件 where后不能跟聚合函数的判断
having在分组之后的条件
*/ -- 1. 查询男同学和女同学各自的数学平均分
select sex, avg(math) from stu group by sex;
-- 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select name sex, avg(math) from stu group by sex;
-- 2. 查询男同学和女同学各自的数学平均分,以及各自人数
select sex, avg(math), count(*) from stu group by sex;
-- 3. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组
select sex, avg(math), count(*) from stu where math > 70 group by sex;
-- 4. 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的。
select sex, avg(math), count(*) from stu where math > 70 group by sex having count(*) > 2;
-- 分页查询 limit
-- 起始索引 = (当前页码 - 1 )*每页显示的条数
-- 格式: select 字段列表 from 表名 limit 起始索引 , 查询条目数;
-- 从0开始查询,查询3条数据
select * from stu limit 0, 3;
-- 每页显示3条数据,查询第1页数据
select * from stu limit 0, 3;
-- 每页显示3条数据,查询第2页数据
select * from stu limit 3, 3;
-- 每页显示3条数据,查询第3页数据
select * from stu limit 6, 3;
约束
约束是作用于表中列上的规则,用于限制加入表的数据
分类:
- 非空约束: 关键字是 NOT NULL
保证列中所有的数据不能有null值。
- 唯一约束:关键字是 UNIQUE
保证列中所有数据各不相同。
- 主键约束: 关键字是 PRIMARY KEY
主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据。
- 检查约束: 关键字是 CHECK
保证列中的值满足某一条件。
- 默认约束: 关键字是 DEFAULT
保存数据时,未指定值则采用默认值。
- 外键约束: 关键字是 FOREIGN KEY
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
外键约束现在可能还不太好理解,后面我们会重点进行讲解。
表关系
- 一对多
在多的一张表中添加外键,指向一的一张表的主键
- 一对一
在任意一张表中添加外键,指向另外一张表的主键,外键保证唯一
- 多对多
借助于第三张表,至少要有两个字段,分别作为外键,指向另外两张表的主键
多表查询
- 内连接查询
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;
-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
- 外连接查询
-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
- 子查询
查询中嵌套查询,称嵌套查询为子查询
事务
数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。
事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。
事务是一个不可分割的工作逻辑单元。
- 开启事务
START TRANSACTION; 或者 BEGIN; - 提交事务
commit; - 回滚事务
rollback;
四大特征:
- 原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
- 一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态
- 隔离性(Isolation) :多个事务之间,操作的可见性
- 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的