DQL排序查询
/*
默认升序排序
desc -- 降序排序
asc -- 升序排序
*/
select * from emp order by sal;1
2
3
4
5
6
7
DQL聚合函数
作用:将一列数据作为一个整体,进行纵向的计算
语法格式: select 聚合函数(字段名) from 表名 [where 条件]
/*
- count() 统计个数
- sum() 求和
- max()求最大值
- min()求最小值
- avg()求平均数
*/
select avg(sal) as '平均薪资' from emp where deptno = 20;1
2
3
4
5
6
7
8
DQL分组查询
/*
分组查询 使用group by 子句 语法格式: select 分组字段/聚合函数 from 表名 group by 分组字段 */
//查询平局薪资大于2000的部门
select deptno, avg(sal) from emp where deptno is not null group by deptno having avg(sal) > 2000;1
2
3
4
5
6
7
8
limit关键字
通过limit关键字去指定要查询数据的条数,行数
select 字段 from 表名 limit offset,length;
`offset: 起始行数,默认从0开始计数
length: 返回的行数(要查寻几条数据)
约束
约束名
约束关键字
主键
primary key
唯一
unique
非空
not null
外键
foreign key
主键约束 primary key
特点
不可重复 唯一 非空
作用
用来表示数据库中的每一条记录
/*
*约束是指对数据进行一定的限制,来保证数据的完整性、有效性、正确性
**/
//主键约束--第一种写法
create table student(
sid int(4) primary key,
sname varchar(20)
);
//主键约束--第二种写法
create table student(
sid int(4),
sname varchar(20),
primary key(sid) //--指定sid为主键约束
);
//主键约束--第二种写法
create table student(
sid int(4),
sname varchar(20) );
/*通过DDL语句添加主键约束*/
alter table student add primary key(sid);
/*通过DDL语句删除主键*/
alter table student drop primary key;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 主键自增
* 关键字: auto_increment 主键的自动增长 ,字段类型必须是整数类型
*/
create table student(
sid int(4) primary key auto_increment,
sname varchar(20) ) auto_increment=100; //自定义自增的起始位置,不写默认从1开始1
2
3
4
5
6
7
8
delete 和 truncate对自增长得影响
delete 删除表中的所有数据,将表中的数据逐条删除
truncate 删除表中的所有数据,是将整个表删除,然后在创建一个结构相同表
/*delete 删除所有数据*/
delete from student; //删除对自增是没有影响的
/*truncate 删除所有数据*/
truncate table student;1
2
3
4
非空约束 not null
/*添加非空约束*/
create table student(
sid int(4) primary key auto_increment,
sname varchar(20) not null//sname这列数据不可以为null
) ;1
2
3
4
5
唯一约束 unique
/*表中的某一列不可以重复(对null值,不做唯一判断)*/
create table student(
sid int(4) primary key auto_increment,
sname varchar(20) unique
) ;1
2
3
4
5
6
主键约束: 唯一并且不可以为null
唯一约束: 唯一但是可以为null
默认值:字段名 字段类型 default 默认值
MySQL事务操作
事务,是一个有一条或者多条sql语句组成的整体,事务中的操作,要么全部成功,要么全部失败。
手动提交事务
功能
语句
开启事务
start transaction; 或者begin
提交事务
commit
回滚事务
rollback
start transaction
这个语句显示的标记一个事务的起始点
commit
表示提交事务, 即提交事务的所有操作,具体的说,就是讲事务中所有对数据库的更新都写到磁盘上的物理数据库中,事务正常结束。
rollback
表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态。
事务的自动提交
/**
*查看事务是否手动提交 (平常默认就是自动提交)
*如果 autocommit 为on 则表示自动提交
*/
show variables like 'autocommit'; /*修改为手动提交*/
set @@autocommit = off;1
2
3
4
5
6
7
8
9
事务的四大特性
特性
含义
原子性
每个事务都是一个整体,不可以在拆分,事务中所有的SQL语句要么都执行成功,要么都失败。
一致性
事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前两人的总金额是10000, 转账后两人的总金额还是10000
隔离性
事务与事务之间不应该相互影响,执行时保持隔离的状态
持久性
一但事务执行成功,对数据库的修改是永久的 ,就算关机,数据也是要保存下来的
事务的隔离级别
数据并发访问
一个数据库可能拥有多个访问客服端,这些客服端都可以并发方式访问数据库。数据库的相同事务可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题,破坏事务的完整性。
并发访问会产生的问题
事务在操作时的理想状态:所有事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个数据,可能引起并发访问的问题。
并发访问的问题
说明
脏读
一个事务读取到了另一个事务中尚未提交的数据
不可重复读
一事务中两次读取的数据内容不一致,要求的是在一个事务中多次读取时数据是一致的。这一般是update操作时引发的问题
幻读
一个事务中,某一次的 select 操作所得到的结果所表征的数据状态,无法支撑后序的业务操作。查询得到的数据状态不准确,导致幻读
四种隔离级别
read uncommitted--------读未提交
可以防止哪些问题: 无
read committed--------读已提交(Oracle 默认隔离级别)
可以防止哪些问题: 脏读
repeatable read-------可重复读(MySQL 默认隔离级别)
可以防止哪些问题: 脏读,不可重复读
serializable ------- 串行化
可以防止哪些问题: 脏读,不可重复读,幻读
注意: 隔离级别从小到大,安全性是越来越高,但是效率是越来越低的,根据不同的情况来选择不同的隔离级别
隔离级别的相关命令
/*
*查看隔离级别--mysql中默认显示为 repeatable-read
**/
select @@tx_isolation; /*
*设置隔离级别--新开链接才能查看隔离级别成功设置
**/
set global transaction isolation level 隔离级别1
2
3
4
5
6
7
8
9
解决脏读的问题
脏读是非常危险的,比如张三向李四购买商品,张三开启事务后向李四转账500块钱,然后李四查询这个钱已经到账了就把货物交给了张三,张三收到货后回滚事务,李四再查时这500块钱没了。
- 解决方案:
一般来说,这应该是隔离级别较低,比如read uncommitted级别,这时将级
别提高到read committed及以上就好了1
2
3
4
解决不可重复读的问题
不可重复读就相当于我第一次查询时手机上短信显示为1000元,然后我给卡里边充了500,然后在电脑屏幕端显示1500元,在我不知道已经充了钱的情况下我不知道该选择哪条短信。
- 解决方案: 和脏读差不多,将全局的隔离级别提高到repeatable read 及以上 就好了1
2
3
解决幻读的问题
幻读还是一样,将隔离级别提到最高就好了,当然也可深入了解
文章来源: blog.csdn.net,作者:x-sheck,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_46767635/article/details/110111231