DQL操作单表
排序
- 语法格式:select 字段名 from 表名 [where 字段名 = 值 ] order by 字段名称 [ASC/DESC]
- ASC 升序(默认)
- DESC 降序
- 组合排序,同时对多个字段进行排序:在字段1的基础上,再去使用字段2进行排序
- 语法格式:select 字段名1 from 表名 [where 字段名 = 值 ] order by 字段名称 [ASC/DESC] , 字段名2 [ASC/DESC]
- 组合排序的特点:如果第一个字段值相同,就按照第二个字段进行排序
聚合函数
- 作用:将一列数据作为一个整体,进行纵向的计算的
- 常用的聚合函数
count(字段) 统计记录数
sum(字段) 求和平均值
max(字段) 求最大值
min(字段) 求最小值
avg(字段) 求平均值
- 语法格式:select 聚合函数(字段名) from 表名 [where 条件]
分组查询
- 语法格式:select 分组字段/聚合函数 from 表名 group by 分组字段
- group by 的分组过程
select * from emp group by sex;
第一步:将性别相同的数据分为一组,返回的是每组的第一条数据
- 分组的目的:为了做统计操作,一般分组和聚合函数一起使用, 另外查询的时候要查询分组字段
- 在分组之后,进行条件过滤 使用 having 判断条件
- where 与 having 的区别
where
1.在分组前进行过滤
2.where后面不能跟聚合函数
having
1.在分组后进行条件过滤
2.having 后面可以写聚合函数
limit关键字
- 通过limit 去指定要查询的数据的条数 行数
- 语法格式: select 字段 from 表名 limit offset , length;
- 参数说明:offset : 起始行数 默认从0开始计数
- 分页公式: 起始行数 = (当前页码 -1 ) * 每页显示条数
SQL约束
约束的作用
对表中的数据进一步的限制,从而保证数据的正确性、有效性、完整性。违反约束的不正确数据,将无法插入到表中。
常见的约束
约束名 | 约束关键字 |
---|
主键 | primary key | 唯一 | unique | 非空 | not null | 外键 | foreign key |
主键约束
特点 | 不可重复 唯一 非空 |
---|
作用 | 用来表示数据库中的每一条记录 |
添加主键约束
语法格式:
方式一: 创建一个带有主键的表
create table emp(
eid int primary key,
ename vachar(20),
sex char(1)
);
方式二:创建表
create table emp(
eid int,
ename vachar(20),
sex char(1),
primary key (eid);
);
方式三:创建表之后再添加主键
create table emp(
eid int ,
ename vachar(20),
sex char(1)
);
通过DDL语句,添加主键
alter table emp add primary key(eid);
主键的自增
- 关键字:auto_increment 主键的自动增长(字段类型必须是 整数类型)
创建主键的自增的表
create table emp(
eid int primary key auto_increment,
ename vachar(20),
sex char(1)
);
重新创建自增主键的表,自定义自增的起始位置
create table emp(
eid int primary key,
ename vachar(20),
sex char(1)
)auto_increment = 100;
delete 和 truncate 对自增长的影响
- delete 删除表中所有数据,将表中的数据逐条删除,对自增没有影响,继续之前的自增
- truncate 删除表中的所有数据,是将整个表删除,然后在创建一个结构相同的表。删除后,从1开始增加
非空约束
- 特点:某一列不允许为空
- 语法格式: 字段名 字段类型 not null
create table emp(
eid int primary key auto_increment,
ename vachar(20) not null,
sex char(1)
);
唯一约束
- 特点:表中的某一列不能够重复(对 null 值,不做唯一判断)
- 语法格式:字段名 字段类型 unique
create table emp(
eid int primary key auto_increment,
ename vachar(20) unique,
sex char(1)
);
主键约束和唯一约束的区别
- 主键约束,是唯一的且不能为空
- 唯一约束,唯一但可以为空
- 一个表中只能由一个主键,但是可以有多个唯一约束
默认值
- 特点: 用来指定某一列的默认值
- 语法格式:字段名 字段类型 default 默认值
create table emp(
eid int primary key,
ename vachar(20),
sex char(1) default '女'
);
数据库事务
什么是事务
事务是一个整体,由一条或多条SQL语句组成,这些SQL语句要么都执行成功,要么都执行失败 ,只要有一条SQL出现异常,整个操作就会回滚,整个业务执行失败
-
回滚 即在事务运行过程中发生了某种故障,事务不能继续执行,系统将事务对数据库中的所有已完成的操作全部撤销,滚回到事务最开始时的状态(在提交之前执行) -
mysql事务操作 手动提交事务 1.开启事务 start transaction ; 或者 begin; 2.提交事务 commit; 3.回滚事务 rollback; 自动提交事务 mysql默认的提交方式 自动提交事务 每执行一条DML语句 都是一个单独的事务
取消自动提交
登录mysql,查看autocommit状态:show variables like ‘autocommit’; on:自动提交 off:手动提交
事务的四大特性ACID
特性 | 含义 |
---|
原子性 | 每个事务都是一个整体,不可再分,事务中所有的SQL语句要么都执行成功,要么都失败 | 一致性 | 事务在执行前数据库的状态与执行后数据库的状态保持一致。 | 隔离性 | 事务与事务之间不应该相互影响,执行时保持隔离的状态 | 持久性 | 一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的 |
MySQL事务隔离级别
数据并发访问
一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库,数据库的相同数据可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题,破坏数据的完整性
并发访问会产生的问题
事务在操作时的理想状态:所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个数据。可能引发并发访问的问题
并发访问的问题 | 说明 |
---|
脏读 | 一个事务读取到了另一个事务中尚未提交的数据 | 不可重复读 | 一个事务中两次读取到的数据内容不一致,要求的是在一个事务中多次读取时数据是一致的,这是进行update操作时引发的问题 | 幻读 | 一个事务中,某一次的select操作得到的结果所表征的数据状态,无法支撑后续的业务操作,查询得到的数据状态不准确,导致幻读 |
四种隔离级别
- read uncommitted:读未提交 可以防止的问题:无
- read committed :读已提交 可以防止的问题:脏读,不可重复读(Oracle默认的隔离级别)
- repeatable read:可重复读 可以防止的问题:脏读,不可重复读(MySQL默认的隔离级别)
- serializable:串行化 可以防止的的问题:脏读,不可重复读,幻读
注意:隔离级别从小到大,安全性是越来越高的,但效率是越来越低的。 根据不同的情况选择对应的隔离级别
隔离级别的相关命令
1.查看隔离级别 select @@tx_isolation; 2.设置隔离级别 set global transaction isolation level 级别名称;
|