ANY
含义
任意,也可以理解为只要满足一个就好了。
语法
= ANY 相当于in
<ANY 相当于小于最大值
>ANY 相当于大于最小值
案例
1 | -- 查询是经理的员工姓名,工资 |
ALL
含义
满足全部
语法
= ALL 等于全部,没有任何意义
< ALL 小于最小值
>ALL 大于最大值
案例
1 | -- 查询部门编号不为20, 且工资比 20部门所有员工工资高 的 员工编号,姓名,职位,工资。 |
not in
注意点
只要空值有可能成为子查询结果集合中的一部分,就不能使用NOT IN 运算符
方案
子查询中将null值排除掉
案例
1 | -- 查找是经理的员工信息 |
表之间的关系
种类
- one to many 【many to one】
- dept和emp
- customer和book
- user和car
- many to many
- stu和teacher
- user和role
- one to one
- qq和zone
- user和card
案例
oneToMany
1 | -- ---------------------------- |
manyToMany
1 |
|
oneToOne
1 | -- ---------------------------- |
嵌套子查询
位置
- from
- where
- having
作用
- 条件
- where
- having
- 表
- from
执行过程
- 子查询首先执行一次
- 给主查询作为查询参数
- 作为一张临时表
相关子查询
含义
当子查询中引用了父查询表中的一个列时,此时数据库服务器就执行相关子查询。
特点
- 主查询有N条记录,子查询就要执行N次
执行过程
入门案例
1 | -- 比本部门平均薪水高的 员工姓名,薪水,分别使用嵌套子查询、相关子查询 |
示意图1
示意图2
其他案例
1 | -- 查询所有部门名称 和 人数,使用相关子查询 |
使用位置
- select
- where
如何判断
根据子查询是否使用主查询的参数来判断
课堂练习
- 查询所有雇员编号、名字、部门名字
- 查询哪些员工是经理
- 查询哪些员工不是经理
- 查询每个部门工资最低的两个员工编号、姓名、工资
视图
含义
- 是sql语句的封装
- 本身不保存数据
- 数据来自基础表或者其他视图
示意图
为什么要用
- 避免重复编写sql语句
- 封装复杂的sql语句
- 显示部分列数据
语法
创建或修改
1 | CREATE [OR REPLACE] |
删除
1 | drop view 视图名; |
查看
1 | desc 视图名; |
使用
1 | select * from 视图名 [where 条件] |
选项
1 | with [cascaded | local] check option -- 对DML操作起到约束作用 |
- cascaded 这是默认的,代表检查选项会级联传递
- local 代表选项不会级联传递
案例一
1 | -- 创建一个视图v_emp10,通过该视图只能查看10号部门的员工编号,员工姓名,职位 |
案例二
1 | -- WITH [CASCADED | LOCAL] CHECK OPTION |
案例三
1 | create or replace view v_user as select *from user where id >10; |
案例四
1 | create or replace view xx select count(*) from user; |
权限
含义
对于资源只有有权限的用户才能操作
相关表
- user
- db
- tables_priv
- columns_priv
- procs_priv
执行示意图
用户管理
语法
创建用户
1 | CREATE USER user [IDENTIFIED BY [PASSWORD] 'password'] |
修改名字
1 | RENAME USER old_user TO new_user; |
修改密码
1 | ALTER USER userIDENTIFIED BY 'password'; |
删除用户
1 | DROP USER user_name |
案例
1 | -- 创建用户 |
权限管理
语法
1 | -- 授权 |
案例
1 | -- 给zs授予所有库中所有表的select权限 |
核实步骤
1 | grant select,update on *.* to 'zs'@'localhost'; |
事务
含义
对数据库的一组操作要不同时成功,要不同时失败。
特性
特性 | 含义 |
---|---|
原子性 | 不可分割的最小单位 |
一致性 | 事务结束后数据保持不变 |
隔离性 | 事务之间互不影响【隔离级别有关系】 |
持久性 | 事务结束之后断电重启后事务不会回滚 |
组成
- DML+TPL
- DML+DDL
- DML+DCL
手动结束
案例一
1 | -- 不自动提交[遇到dml不会自动提交事务需要手动来处理,commit|rollback] |
案例二
1 | set @@autocommit=1; -- 恢复默认 |
自动结束
自行验证,了解即可
自动提交
- 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)语句;
- 执行一个DCL(GRANT、REVOKE)语句;
自动回滚
- 客户端强行退出
- 客户端连接到服务器端异常中断
- 系统崩溃
还原点
1 | BEGIN; -- 开始事务操作 |
事物隔离级别
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ【默认】 | SERIALIZABLE | |
---|---|---|---|---|
脏读 | y | n | n | n |
不可重复读 | y | y | n | n |
幻读(虚读) | y | y | y | n |
解释
脏读: 一个事务读取到另一个事务未提交的数据
不可重复读:一个相同的事务多次读取的数据不一样
幻读:强调在于某一个范围内的数据行变多或者是变少了,侧重说明的是数据集不一样导致了产生了幻读。
查看
1 | SELECT @@TRANSACTION_ISOLATION; |
修改
1 | SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE} |
SESSION 代表只会对当前会话有效
GLOBAL 代表会对所有会话有效