多表查询:select 列名列表 from 列表 where
消除无用的数据
笛卡尔积:有两个集合A,B,取这两个集合的所有组成情况。
完成多表查询,需要消除无用的数据。
多表查询的分类:
1.隐式内连接查询 ;
“.”左边写表名右边写列,相当于查询某表某列
select 查询的内容 from emp t1,dep t2 where 把emp成为t1,这样可以简写内容
显式内连接 语法:
select 字段列表 from 表名1(inner) join 表名2 on条件
3.内连接查询注意事项:1需要确定从那些表中查询数据 2.查询条件是什么 3.查询那些字段
2.外连接查询;
左外链接:语法:
select 查询的字段列表 from 表1left (outer) join 表2 on条件
如果某个表含有某个字段,则显示所有内容 如果没有某个字段,则不显示另一个表的内容。如果使用左外查询则可避免此情况,
查询的是左表所有数据以及其交集不分。
右外连接:select 查询的字段列表 from 表1 right(outer) join 表2 on条件
同上 查询的是右表所有数据以及其交集不分。
3.子查询;概念 查询中嵌套查询 称嵌套查询为子查询
select MAX(SALARY)FROM EMP;
SELECT * FROM EMP WHERE EMP.sALARY = 9000;综合后:
SELECT * FROM EMP WHERE EMP.sALARY = (select MAX(SALARY)FROM EMP);
子查询不同结果:
1.子查询的结果是单行单列的
子查询可以作为条件,使用运算符去判断
select * from emp where emp.salary <(Select avg(salary) from emp);
2.子查询的结果是多行单列的
查询的结果是多行单列的 ,使用运算符in来判断
3.子查询的结果是多行多列的
子查询可以作为一张虚拟表来查询,或者通过内连接来查询
事务: 事务的基本介绍
概念:如果一个含有多个步骤额业务操作,被事务管理,这么这些操作要么同时成功,要么同时失败。
操作:开启事务:start transaction
提交:commitg;
回滚:rollback;
4.Mysql数据库中事务默认自动提交
事务提交的两种方式
1.mysql就是自动提交的
2.1条sml语句会自动提交一次失误
手动提交:需要先开启事务,在提交 -- oracle数据库是默认手动提交的
修改事务的默认提交 方式:
查看事务的默认提交方式 select @@autocommit; 1代表自动提交 0代表手动提交
只要SET @@autocommit = 0 就变成了手动提交
事务的四大特征:
1.原子性:事务要么同时成功,要么同时失败,是不可分割的最小单位
2.持久性:如果事务一旦提交或回滚后,数据库的数据就会被持久的更新
3.隔离性:多个事务之间相互影响。
4.一致性:事务操作前后数据总量不变。
事务的隔离级别(了解)
概念:多个事务之间隔离的,相互独立的,如果多个事务操作同一批数据,则会引发一些问题,设置不通过的隔离级别就可以解决这些问题
存在问题:
1.脏读:一个事务,读取到另一个事务中没有提高的数据。
2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样
3.幻读:一个事务操作DML数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
隔离级别:1.read uncommitted: 读未提交
产生的问题:1.脏读 2. 不可重复度 3 幻读。
2.read committed:读已提交:(oracle)
产生的问题:不可重复读 幻读
3.repeatable read :可重复读 (MYSQL)
产生的问题:幻读
4.serializable 串行化:
可以结局所有问题
注意: 隔离级别从小到大 安全性越来越高 效率越来越低
数据库查询隔离级别:select @@tx_isolation;
数据库设置隔离级别 set global transaction isolation 隔离级别
DCL :管理用户,授权
DBA:数据库管理员 专门管理数据库
1.管理用户
1.添加用户
create user ‘用户名’@‘主机名’ identified by ‘密码’;
2.删除用户
drop user ‘用户名’@‘主机名’;
3.修改用户密码;
update user set password = password(‘新密码’)where user =‘用户名’
set password for '用户名'@'主机名'=password('新密码')
mysql 中如果忘记了root密码??
1.cmd去执行 net stop mysql。
注意 需要管理员运行改cmd 然后使用无验证方式启动mysql服务:
2.使用mysqld --skip-grant-tables
3.打开新的cmd 窗口,直接输入mysql命令
4user mysql
5.update user set password = password‘你的新密码’ where user = ‘root’
6.关闭两个窗口
7在任务管理器中关掉mysqld服务 然后 在开启mysql服务。
8.启动mysql服务
9.使用新密码登录
4.查询用户
-****
1.切换到mysql 数据库有
2. 查询user表、
sue mysql select* from user;
通配符%表示可以在任意主机使用用户登录数据库
2. 授权
1.查询权限
show grants for ‘用户名’@‘主机名’
2.授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
所有权限的通配符 all 所有表的通配符 *
3.撤销权限
语法:revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'