MySQL单表&约束&事务

DQL操作单表

  • 排序
# 通过 ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示效果,不会影响真实数据)
SELECT 字段名 FROM 表名 [WHERE 字段 =] ORDER BY 字段名 [ASC / DESC]
# 单列排序,只按照某一个字段进行排序, 就是单列排序
-- 降序排序
SELECT * FROM emp ORDER BY salary DESC;
# 组合排序,同时对多个字段进行排序, 如果第一个字段相同 就按照第二个字段进行排序,以此类推
-- 组合排序
SELECT * FROM emp ORDER BY salary DESC, eid DESC;
  • 聚合函数
    前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值(另外聚合函数会忽略null空值。);
SELECT 聚合函数(字段名) FROM 表名;
聚合函数作用
count(字段)统计指定列不为NULL的记录行数
sum(字段)计算指定列的数值和
max(字段)计算指定列的最大值
min(字段)计算指定列的最小值
avg(字段)计算指定列的平均值

需求:
1 查询员工的总数
2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值
3 查询薪水大于4000员工的个数
4 查询部门为’教学部’的所有员工的个数
5 查询部门为’市场部’所有员工的平均薪水
在这里插入图片描述

SQL实现

#1 查询员工的总数
-- 统计表中的记录条数 使用 count()
SELECT COUNT(eid) FROM emp; -- 使用某一个字段
SELECT COUNT(*) FROM emp; -- 使用 *
SELECT COUNT(1) FROM emp; -- 使用 1,与 * 效果一样
-- 下面这条SQL 得到的总条数不准确,因为count函数忽略了空值
-- 所以使用时注意不要使用带有null的列进行统计
SELECT COUNT(dept_name) FROM emp;

#2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值
-- sum函数求和, max函数求最大, min函数求最小, avg函数求平均值
SELECT
SUM(salary) AS '总薪水',
MAX(salary) AS '最高薪水',
MIN(salary) AS '最低薪水',
AVG(salary) AS '平均薪水'
FROM emp;

#3 查询薪水大于4000员工的个数
SELECT COUNT(*) FROM emp WHERE salary > 4000;

#4 查询部门为'教学部'的所有员工的个数
SELECT COUNT(*) FROM emp WHERE dept_name = '教学部';

#5 查询部门为'市场部'所有员工的平均薪水
SELECT
AVG(salary) AS '市场部平均薪资'
FROM emp
WHERE dept_name = '市场部';
  • 分组查询
# 分组查询指的是使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组
SELECT 分组字段/聚合函数 FROM 表名 GROUP BY 分组字段 [HAVING 条件];
-- 按照性别进行分组操作
SELECT * FROM emp GROUP BY sex;
# 分组需要和聚合函数一起使用进行统计才有意义

在这里插入图片描述

#1.查询所有部门信息
#2.查询每个部门的平均薪资
#3.查询每个部门的平均薪资, 部门名称不能为null

#1. 查询有几个部门
SELECT dept_name AS '部门名称' FROM emp GROUP BY dept_name;
#2.查询每个部门的平均薪资
SELECT
dept_name AS '部门名称',
AVG(salary) AS '平均薪资'
FROM emp GROUP BY dept_name;

# 查询平均薪资大于6000的部门
-- 需要在分组后再次进行过滤,使用 having
SELECT
dept_name ,
AVG(salary)
FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name HAVING AVG(salary) > 6000 ;
  • where 与 having的区别
过滤方式特点
wherewhere 进行分组前的过滤,where 后面不能写 聚合函数
havinghaving 是分组后的过滤,having 后面可以写 聚合函数

SQL约束

  1. 约束的作用:
    对表中的数据进行进一步的限制,从而保证数据的正确性、有效性、完整性.
    违反约束的不正确数据,将无法插入到表中
  2. 常见的约束
约束名约束关键字
主键primary key
唯一unique
非空not null
外键foreign key
  • 主键约束
    特点:不可重复,非空,唯一。
# 方式1 创建一个带主键的表
CREATE TABLE emp2(
-- 设置主键 唯一 非空
eid INT PRIMARY KEY,
ename VARCHAR(20),
sex CHAR(1)
);
-- 删除表
DROP TABLE emp2;
-- 方式2 创建一个带主键的表
CREATE TABLE emp2(
eid INT ,
ename VARCHAR(20),
sex CHAR(1),
-- 指定主键为 eid字段
PRIMARY KEY(eid)
);
-- 方式3 创建一个带主键的表
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;
--主键的自增
# 主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值

-- 创建主键自增的表
CREATE TABLE emp2(
-- 关键字 AUTO_INCREMENT,主键类型必须是整数类型
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
);

-- 创建主键自增的表,自定义自增其实值
CREATE TABLE emp2(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
)AUTO_INCREMENT=100;

使用DELETE只是删除表中所有数据,对自增没有影响,使用truncate 是将整个表删除掉,然后创建一个新的表 自增的主键,重新从 1开始

  • 非空约束
    非空约束的特点: 某一列不予许为空
# 非空约束
CREATE TABLE emp2(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- 添加非空约束, ename字段不能为空
ename VARCHAR(20) NOT NULL,
sex CHAR(1)
);
  • 唯一约束
    唯一约束的特点: 表中的某一列的值不能重复( 对null不做唯一的判断 )
CREATE TABLE emp3(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20) UNIQUE,
sex CHAR(1)
);

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

  1. 主键约束 唯一且不能够为空
  2. 唯一约束,唯一 但是可以为空
  3. 一个表中只能有一个主键 , 但是可以有多个唯一约束
  • 默认值
    默认值约束 用来指定某列的默认值
-- 创建带有默认值的表
CREATE TABLE emp4(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- 为ename 字段添加默认值
ename VARCHAR(20) DEFAULT '奥利给',
sex CHAR(1)
);

数据库的事务

事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有一条SQL出现异常,整个操作就会回滚,整个业务执行失败。
比如: 银行的转账业务,张三给李四转账500元 , 至少要操作两次数据库, 张三 -500, 李四 + 500,这中 间任何一步出现问题,整个操作就必须全部回滚, 这样才能保证用户和银行都没有损失.
语法格式:

功能语句
开启事务start transaction; 或者 BEGIN;
提交事务commit;
回滚事务rollback;
  • START TRANSACTION
    这个语句显式地标记一个事务的起始点。
  • COMMIT
    表示提交事务,即提交事务的所有操作,具体地说,就是将事务中所有对数据库的更新都写到磁盘上的物理数据库中,事务正常结束。
  • ROLLBACK
    表示撤销事务,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态

事务的的四大特性ACID

特 性含义
原 子 性每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都失败。
一 致 性事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前2个人的 总金额是 2000,转账后 2 个人总金额也是 2000.
隔 离 性事务与事务之间不应该相互影响,执行时保持隔离的状态.
持 久 性一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的.
MySQL 事务隔离级别

一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库的相同数据可能被多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据的完整性。事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个数据。可能引发并发访问的问题。

并发访问的问题说明
脏读一个事务读取到了另一个事务中尚未提交的数据
不可重复读一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一致的. 这是进行 update 操作时引发的问题
幻读一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务操作. 查询得到的数据状态不准确,导致幻读
  • 四种隔离级别
    在这里插入图片描述
  • 隔离级别相关命令
# 查看隔离级别
select @@tx_isolation;
# 设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化
set global transaction isolation level 级别名称;
read uncommitted 读未提交
read committed 读已提交
repeatable read 可重复读
serializable 串行化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Michael McLaughlin,OracleACE,是美国爱达荷州杨百翰大学计算机信息技术系教授,Michael参与Oracle公司系列产品的研发已经有20年了,担任过开发者、DBA,以及电子商务套件应用程序DBA。 他在咨询、支持和开发方面都有建树。他还是ATOMS事务架构(美国专利号#7 206 805和#7 290056)的发明者。这两项专利均归属Oracle公司。 他撰写了6本有关Oracle技术著作,其中包括清华大学出版社引进并出版的《Oracle Database 11gPL/SQL程序设计》、《Oracle Database11gPL/SQL编程实践》等。 第I部分开发组件 第1章 架构 3 1.1 通用的客户端-服务器 计算模型 4 1.2 Oracle Database 11g8 1.2.1 客户端软件:SQL*Plus 8 1.2.2 Oracle11g服务器软件9 1.2.3 Oracle数据字典17 1.3 Oracle MySQL 5.6 17 1.3.1 客户端软件: MySQL Monitor18 1.3.2 MySQL服务器软件18 1.3.3 MySQL数据字典22 1.4 小结22 1.5 习题23 第2章 客户端接口25 2.1 SQL*Plus 26 2.1.1 与SQL*Plus连接和 断开连接 26 2.1.2 在SQL*Plus环境下 工作 30 2.1.3 在SQL*Plus中编写 SQL语句34 2.1.4 用SQL*Plus保存 SQL语句36 2.1.5 用SQL*Plus编辑 SQL语句36 2.1.6 从缓冲区重新运行 SQL*Plus的SQL语句36 2.1.7 在SQL*Plus中取消 SQL语句条目37 2.1.8 调用并运行SQL*Plus 脚本文件 37 2.1.9 向SQL*Plus脚本文件 传递参数 39 2.1.10 调用PL/SQL程序41 2.1.11 编写SQL*Plus日志 文件 45 2.2 MySQL Monitor 46 2.2.1 连接和断开 MySQL Monitor46 2.2.2 编写MySQLSQL语句51 2.2.3 保存MySQLSQL语句53 2.2.4 编辑MySQLSQL语句54 2.2.5 取消MySQLSQL语句55 2.2.6 调用和运行MySQL 脚本文件 56 2.2.7 设置会话变量 56 2.2.8 调用SQL/PSM程序57 2.2.9 编写MySQL的日志 文件 60 2.3 小结62 2.4 习题62 第3章 安全模型 65 3.1 安全屏障66 3.1.1 网络的安全防护 66 3.1.2 操作系统的安全防护 66 3.1.3 数据库的安全防护 66 3.2 安全权限69 3.3 定义者和调用者权利79 3.3.1 定义者权利79 3.3.2 调用者权利80 3.4 小结81 3.5 习题81 第4章 事务模型 83 4.1 数据事务84 4.2 ACID兼容的SQL语句87 4.2.1 INSERT语句88 4.2.2 UPDATE语句91 4.2.3 DELETE语句92 4.3 存储程序93 4.4 触发器 95 4.5 小结96 4.6 习题97 第5章 约束 99 5.1 NOTNULL约束101 5.1.1 Oracle数据库的 NOT NULL约束102 5.1.2 MySQL数据库的 NOT NULL约束103 5.2 UNIQUE约束103 5.2.1 Oracle数据库的 UNIQUE约束104 5.2.2 MySQL数据库的 UNIQUE约束105 5.2.3 唯一索引106 5.3 主键约束107 5.3.1 Oracle数据库的 主键约束 107 5.3.2 MySQL数据库的 主键约束 108 5.4 外键约束108 5.4.1 Oracle数据库的 外键约束 110 5.4.2 MySQL数据库的 外键约束 111 5.5 CHECK约束112 5.5.1 Oracle数据库的 CHECK约束113 5.5.2 MySQL数据库的 CHECK约束113 5.6 触发器约束114 5.7 小结115 5.8 习题115 第II部分SQL开发 第6章 创建用户和结构119 6.1 用户120 6.1.1 Oracle数据库的用户120 6.1.2 MySQL数据库的用户126 6.2 数据库131 6.2.1 Oracle的模式131 6.2.2 MySQL数据库132 6.3 表 134 6.3.1 Oracle数据库的表135 6.3.2 MySQL数据库的表161 6.4 索引179 6.4.1 Oracle数据库的索引180 6.4.2 MySQL数据库的索引181 6.5 小结182 6.6 习题182 第7章 修改用户和结构185 7.1 用户186 7.1.1 Oracle数据库的用户186 7.1.2 MySQL数据库的用户189 7.2 数据库190 7.3 会话190 7.3.1 启用SQL的追踪190 7.3.2 启用条件性编译 192 7.4 表 193 7.4.1 数据目录的表定义194 7.4.2 添加、修改和抛弃列 199 7.4.3 抛弃表213 7.5 索引214 7.5.1 Oracle数据库的 索引维护 215 7.5.2 My

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值