学习笔记输出来源:拉勾教育Java就业急训营
修改时间:2021年1月19日
作者:pp_x
邮箱:[email protected]
文章目录
排序
- 通过
ORDER BY
子句,可以将查询出的结果进行排序(排序只是显示效果,不会影响真实数据)
语法结构
SELECT 字段名 FROM 表名 [WHERE 字段 = 值] ORDER BY 字段名 [ASC / DESC]
ASC 表示升序排序(默认) |
---|
DESC 表示降序排序 |
排序方式
1、单列排序
- 只按照某一个字段进行排序, 就是单列排序
-- 默认升序排序
ASC SELECT * FROM emp ORDER BY salary;
-- 降序排序
SELECT * FROM emp ORDER BY salary DESC;
2、组合排序
- 同时对多个字段进行排序, 如果第一个字段相同 就按照第二个字段进行排序,以此类推
-- 组合排序 SELECT * FROM emp ORDER BY salary DESC, eid DESC;
聚合函数
语法结构
SELECT 聚合函数(字段名) FROM 表名
聚合函数写法
聚合函数 | 作用 |
---|---|
count(字段) | 统计指定列不为NULL的记录行数 |
sum(字段) | 计算指定列的数值和 |
max(字段) | 计算指定列的最大值 |
min(字段) | 计算指定列的最小值 |
avg(字段) | 计算指定列的平均值 |
分组
分组查询指的是使用 GROUP BY
语句,对查询的信息进行分组,相同数据作为一组
语法格式
select 分组字段/聚合函数 from 表名 GROUP BY 分组字段 [HAVING 条件]
having和where的区别
- where:
- where是在分组前进行条件过滤
- where后面不能跟聚合函数
- having:
- having在分组之后进行条件过滤
- having后面可以跟聚合函数
limit关键字
- limit是限制的意思,用于限制返回的查询结果的行数 (可以通过limit指定查询多少行数据)
- limit语法是MySQL的方言,可以用来完成分页
SELECT 字段1,字段2... FROM 表名 LIMIT offset , length;
- 参数说明
- offset : 起始行数,默认为0
- length : 返回的行数
注意:分页公式 起始索引 = (当前页 - 1) * 每页条数
SQL约束
- 作用:对表中的数据进行进一步的约束,从而保证数据的完整性、有效性、正确性,违反约束的数据无法插入表中。
常见的约束
- 主键约束:
primary key
- 唯一约束:
unique
- 非空约束:
not null
- 外键约束:
foreign key
主键约束
- 不可重复、唯一、非空
- 用来表示数据库中的每一条数据
字段名 字段类型 primary key
- 创建方式一
# 方式1 创建一个带主键的表
CREATE TABLE emp2(
-- 设置主键 唯一 非空
eid INT PRIMARY KEY,
ename VARCHAR(20),
sex CHAR(1)
);
- 创建方式二
CREATE TABLE emp2(
eid INT ,
ename VARCHAR(20),
sex CHAR(1),
-- 指定主键为
eid字段 PRIMARY KEY(eid)
);
- 创建方式三
CREATE TABLE emp2(
eid INT ,
ename VARCHAR(20),
sex CHAR(1)
);
-- 创建的时候不指定主键,然后通过 DDL语句进行设置
ALTER TABLE emp2 ADD PRIMARY KEY(eid);
- 删除方式
-- 使用DDL语句 删除表中的主键
ALTER TABLE emp2 DROP PRIMARY KEY;
DESC emp2;
主键自增
关键字:
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
- 修改主键自增的起始值
-- 创建主键自增的表,自定义自增其实值
CREATE TABLE emp2(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
)AUTO_INCREMENT=100;
两种删除方式对自增的影响
- 删除表中所有数据的方式
- DELETE:只是删除表中的数据对自增没有影响(继承原本的数字)
- TRUNCATE:由于此方法是删除整个表然后创建一个新的表,所以自增从1开始
非空约束
- 语法格式
字段名 字段类型 not null
唯一约束
- 语法格式
字段名 字段类型 unique
外键约束
默认值
- 语法格式
字段名 字段类型 DEFAULT 默认值
数据库事务
什么是事务
- 事务时一个整体,要么全部执行,要么全部不执行,如果其中有一条sql语句出现异常,则整个事务操作会进行回滚,整个事务执行失败
- 回滚:即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,滚回到事务开始时的状态。(提交之前执行)
MySQL的事务操作
- 手动提交事务
- 自动提交事务(默认)
手动提交事务
- 语法格式
- 开启事务:
start transaction
;或者BEGIN
; - 提交事务:
commit
- 回滚事务:
rollback
- 开启事务:
- 解释
start transaction
:显式地标记一个事务的起始点
commit
:表示提交事务,即提交事务的所有操作,具体地说,就是将事务中所有对数据库的更新都写到磁盘上的物理数据库中,事务正常结束。
rollback
:表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态
自动提交事务
- MySQL默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MySQL默认开始自动提交事务
取消自动连接
- 登录mysql,查看autocommit状态。
SHOW VARIABLES LIKE 'autocommit';
- 把 autocommit 改成 off
SET @@autocommit=off;
事务的四大特性
- 原子性:每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都失败。
- 一致性:事务在执行前数据库的状态与执行后数据库的状态保持一致。
- 隔离性:事务与事务之间不应该相互影响,执行时保持隔离的状态
- 持久性:一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的
MySQL事务隔离级别
并发访问会产生的问题
- 事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个 数据。可能引发并发访问的问题
并发访问的问题 | 问题说明 |
---|---|
脏读 | 一个事务读取到了另一个事务中尚未提交的数据 |
不可重复读 | 一个事务中两次读取的数据内容不一致,要求在一个事务中多次读取时数据内容一致 |
幻读 | 一个事务中,读取到的数据无法支撑后续的业务操作,查询到的数据不准确 |
四种隔离级别
级别 | 隔离名称 | 隔离级别 | 脏读 | 不可重复读 | 幻读 | 默认的隔离级别 |
---|---|---|---|---|---|---|
1 | 读未提交 | read uncommitted | 会出现问题 | 会出现问题 | 会出现问题 | |
2 | 读已提交 | read committed | 不会出现问题 | 会出现问题 | 会出现问题 | Oracle和SQLserver |
3 | 可重复读 | repeatable read | 不会出现问题 | 不会出现问题 | 会出现问题 | mysql |
4 | 串行化 | serializable | 不会出现问题 | 不会出现问题 | 不会出现问题 |
查看隔离界别
select @@tx_isolation;
注意:隔离级别越高,性能越差