MySQL的单表、约束、事务等操作

学习笔记输出来源:拉勾教育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

外键约束

MySQL笔记之多表的操作

默认值

  • 语法格式
字段名 字段类型 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;

注意:隔离级别越高,性能越差

猜你喜欢

转载自blog.csdn.net/weixin_46303867/article/details/112851841