MySQL学习笔记任务二

任务二:MySQL单表、约束和事务

DQL排序查询

sqlyang进行新建数据库

在新建的数据库db2上复制表

排序操作,使用order by 子句

语法结构

select 字段名 from 表名 【where 字段名 = 值】 order by 字段名

asc 升序排序

desc 降序排序

若无声明 则默认为升序排序

单列排序

select * from 表名 order by salary;

进行升序或降序排序

组合排序

select * from 表名 【where 条件】order by salary desc,eid desc;

组合排序的特点:如果第一个字段的值相同,则按照第二个字段的值来进行排序。

DQL聚合函数

聚合函数作用:将一列数据看做一个整体,进行纵向的计算

常用的聚合函数:

count(字段)用于统计个数

sum(字段)用于求和

max(字段)用于求最大值

min(字段)用于求最小值

avg(字段)用于求平均值

语法格式:

select 聚合函数 (列名或字段名) from 表名 【where 条件】;

查询员工的总个数

select count (*)from 表名;

count函数在统计的时候会忽略控制;

注意事项:不要把含有空值的字段去进行聚合函数count操作。

查看薪水

查询薪水大于4000的员工的个数

select count (*) from 表名 where salary > 4000;

查询部门为‘教学部’的所有员工的个数

select count (*) from 表名 where dept_name = ‘教学部’;

查询部门为‘市场部’的所有员工的平均薪水

select avg (salary)from 表名 where dept_name = ‘市场部’;

DQL分组查询

分组查询,使用 group by 子句

语法格式:

select 分组字段/聚合函数 from 表名 group by 分组字段

分组过程

将分组完成的第一条数据进行返回

分组的目的:

为了统计操作,一般分组会和聚合函数一起使用,才有意义,另外,查询的时候也要查询分组字段

通过性别分组,求各组的平均薪资

select sex , avg(salary) from 表名 group by sex;

查询所有部门信息

select dept_name as ‘部门信息’ from 表名 group by dept_name;

查询每个部门的平均薪资

select dept_name,avg(salary)from 表名 group by dept_name;

查询每个部门的平均薪资,部门名称不能为null

select

dept_name,avg(salary)

from 表名

where dept_name is not null

group by dept_name;

查询平均薪资大于6000的部门

第一步:先分组查询,将所有部门的平均薪资查询出来

第二步:使用having关键字,将分组查询出的数据进行筛选

select

dept_name,

avg(salary)

from 表名

where dept_name is not null

group by dept_name

having avg(salary)> 6000;

where和having的区别:

limit关键字

limit关键字作用 :指定查询的条数,行数

语法格式:

select 字段 from 表名 limit offset,length;

查询表中的前5条数据

select * from 表名 limit 0,5;

select * from 表名 limit 5;

查询表中,从第四条开始查询,共查询六条

select * from 表名 limit 3,6;

分页操作

分页公式:起始行数 = (当前页码-1)* 每页显示条数

约束的介绍

约束介绍

主键约束

主键约束:

特点:不可重复、唯一、非空

作用:用来表示数据库中的每一条记录,让其合理化

方式一:创建一个带主键的表

查看表的结构,使用DDL语言,desc来操作

方式二:创建表,指定字段为主键

方式三:先创建表,在使用DDL语句去添加主键

删除主键

使用DDL语句

alter table 表名 drop primary key;

主键自增

使用auto_increment 关键字,实现主键的自动增长,注意字段类型必须是整数类型

创建主键自增的表

添加数据,观察主键变化

修改自增起始值,也就是自定义主键的起始值

在表的创建字段后的括号外添加auto_increment = 自定义起始值

添加数据,观察主键变化

DELETE和TRUNCATE对自增长的影响

delete和truncate对自增的影响

delete方式删除所有数据

对自增没有影响,删除过后在进行数据插入,则主键从上一个数值继续自增

truncate删除所有数据

对自增有影响,在进行数据插入时,自增从1开始

非空约束

非空约束介绍

语法格式

唯一约束

唯一约束

特点:表中的某一列不能够重复(但对null值,不做唯一判断)

语法格式: 字段名 字段类型 unique

创建表,对ename添加唯一约束

添加数据进行测试唯一约束

主键约束和唯一约束的区别:

  1. 主键约束:是唯一的且不能为null值
  2. 唯一约束:是唯一的但是可以为null值

  1. 一个表中只能有一个主键,但是可以有多个唯一约束

默认值

默认值:用来指定某一列的默认值

语法格式:字段名 字段类型 defaullt 默认值

创建表,将性别设置为默认值:女

添加信息,查看,性别为女

不适用默认值进行添加,则会覆盖默认值

事务的基本概念&转账操作演示

事务的基本概念:是一个由一条或多条SQL组成的一份整体,事务中的操作要么全部成功,要么全部失败

由转账操作来进行演示,将整个转账过程封装为一个事务。

使用数据表来进行演示

执行转账操作,操作成功

操作失败,报错,事务回滚,撤销tom账户执行的命令。

mysql手动提交事务

手动提交事务操作

dos命令行中进行操作转账

开启事务

执行转账操作

执行转账操作

commit提交事务

若没有commit提交事务,则事务未运行完,数据表中将不会有相关反应(账户余额在commit提交事务前无任何反应)

若事务执行中出错,则会回滚,撤销上一步操作。

mysql自动提交事务

自动提交事务,为mysql的默认方式

每执行一条DML语句,都是一个单独的事务

事务的开始和提交自动运行,不在需要手动。

执行转账操作

默认自动提交,并没有commit,就能看到数据变化

修改mysql的提交方式

修改为手动后,操作执行完,需手动commit操作

数据变化

mysql的四大特征

事务的四大特性

原子性:每个事务都是一个整体,不可以在拆分,事务中的所有SQL语句,要么都成功,要么都失败。

一致性:数据库的状态在事务的执行前后要保持一致,比如转账操作中,事务执行前salary中的总数为2000,则事务执行后的金额总数也为2000.

隔离性:事务与事务之间不应该相互影响,执行时要保证隔离状态。

持久性:事务一旦执行成功,对数据的修改是持久的,关机啥的,不会影响数据。

mysql事务隔离级别

事务的隔离级别介绍

并发访问的问题:脏读、不可重复读、幻读。

设置隔离级别来防止并发访问的问题

read uncommitted 读未提交 无法防止问题

read committed 读已提交 可防止脏读

repeatable reaf 可重复读 可防止脏读、不可重复读。

serializable 串行化 可防止脏读、不可重读读、幻读。

注意:

隔离级别越大,安全性越高,但效率低

总结

隔离级别相关命令

隔离级别相关命令

查看隔离级别

设置隔离级别

设置修改完后,需新建数据库连接,即可查看修改后的结果。

脏读演示与解决

脏读演示

将事务的隔离级别设置为最低级别

重新打开数据库查看事务隔离级别

新建数据库窗口,代表两个事务

事务a进行数据修改,但不提交

事务b进行数据读取查看

事务a进行数据修改,但并没有commit提交,但同时在事务b中对数据的读取发生了变化

若此时事务a执行回滚操作,事务b读取数值也随着变化。

事务隔离级别设置为 read committed

演示效果:

事务a执行的转账操作未提交时,事务b查询结果无变化。

不可重复读演示及解决

不可重读演示

事务a 执行修改操作提交

事务b对数据的查询前后不一致

导致问题:同一事务中,对同一数据的查询,前后两次不一致

解决方法:将事务的隔离级别修改为:repeatable read

效果如下

幻读演示及解决

幻读介绍

打开a,b窗口

事务a执行查询,事务b执行操作

事务a在想插入数据,则会报错

解决方法,将事务隔离级别提升至 serializable

解决效果:

注意:当事务b执行插入操作时,不会立即完成,要等待事务a操作完毕

所以,这事务隔离级别效率低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值