mysql 第四天

多表查询: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 '用户名'@'主机名'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值