概述

数据库 : 存储和管理数据的仓库,数据是有组织的进行存储

数据库管理系统 : 管理数据库的大型软件

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) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的