MYSQL学习笔记2

多表查询:

    笛卡尔积:有两个集合,要取这两个集合的所有组成情况

                       要完成多表查询,需要消除无用的数据

    多表查询的分类:

        1、内连接查询:

                ① 隐式内连接:使用where条件删除无用数据

                ② 显示内连接:语法:select 字段列表 from 表名1 inner join 表名2 on 条件

                                           例如:(emp是员工,dept是部门)    select * from emp inner join dept on emp.dept_id = dept.id;

 

                ③ 内连接查询

                        1、从哪些表中查询数据

                        2、条件是什么

                        3、查询哪些字段

        2、外连接查询:

                1、左外连接:  查询的是左表所有的记录以及它的交集

                        语法:select 字段列表 from 表1 left [outer] join 表2 on 条件           [outer]加中括号表示可以省略

                2、右外连接:查询的是右表所有的记录以及它的交集

                        语法:select 字段列表 from 表1 right [outer] join 表2 on 条件           [outer]加中括号表示可以省略

                3、子查询:

                        1、概念:查询中嵌套查询,称嵌套查询为子查询。

                        2、子查询的不同情况:

                                1、子查询的结果是单行单列:

                                        -- 查询员工工资小于平均工资的员工

                                        (emp是员工表,salary是薪水)     select * from emp where emp.salary < (select avg(salary) from emp);

                                2、子查询的结果是多行单列

                                        -- 查询财务部和市场部的所有员工信息

                                        select * from emp where dept_id in (select id from dept where name in('财务部',‘市场部’));

                                3、子查询的结果是多行多列

                                        查询员工入职日期是2011-11-11之后的员工信息和部门信息

                                        select * from dept t1 , (select * from emp where emp.join_date > 2011-11-11) t2

                                        where t1.id = t2.dept_id

                                        普通内连接:

                                                select * from emp t1 , dept t2 where t1.dept_id = t2.id and t1.join_data > '2011-11-11' 

 

    事务:

                1、事务的基本介绍

                        1、概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

                        2、操作:

                                ① 开启事务    start transaction

                                ② 回滚    rollback    //回滚就是数据库回到开启事务时的状态

                                ③ 提交    commit    //提交后数据库的状态会持久下去,不是临时存储。

                        举个例子:孙悟空有10块钱,猪八戒也有10块钱,现在开启事务,孙悟空给了猪八戒五块钱,猪八戒一看多了五块                                                   钱,于是就去买西瓜了,现在孙悟空rollback回滚,猪八戒买西瓜时一看钱不够了只有10块钱,于是被人                                               赶了出来。这时候孙悟空又是10块钱了。

                                         第二次来了:孙悟空又叫猪八戒去买毛桃,两人各10快,这次孙悟空给了猪八戒7块钱,然后猪八戒看着                                                 孙悟空,让他commit,于是孙悟空知道骗不了猪八戒,commit提交了,之后猪八戒便去买桃子回来了。

                        3、MySQL数据库中事务默认自动提交

                                * 事务提交的两种方式:、

                                        ① 自动提交:MySQL就是自动提交,一条DML语句会自动提交一次事务

                                        ② 手动提交: Oracle就是手动提交

                                                                需要先开启事务,再提交。

                        4、修改事务的默认提交方式:

                                ① 查看事务的默认提交方式:select @@autocommit      //输出1代表自动提交,输出0表示手动提交

                                ② 修改默认提交方式: set @@autocommit = 0;    //将其改为手动提交

                2、事务的四大特征(常见面试题):

                        1、原子性:不可分割的最小操作单位,要么同时成功,要么同时失败

                        2、持久性:当事务提交或回滚后,数据库会持久化的保存数据

                        3、隔离性:多个事务之间,相互独立

                        4、一致性:事务操作前后,数据总量不变,张三李四互相给钱,但他们钱的总量不变。

                3、事务的隔离级别:

                        1、多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就会解决这些问题。

                        2、存在问题:

                                ① 脏读:一个事务中读到另一个事务中没有提交的数据。

                                ② 不可重复读(虚读):在同一个事务中两次读取到的数据不一样。

                                ③ 幻读:一个事务操作数据表中所有记录,另一个事务添加了一条事务,则第一个事务查询不到自己的修改。

                        3、隔离级别:

                                ① read uncommitted:读未提交:也就是说事务所作的修改在未提交前,其他并发事务是可以读到的。

                                        产生的问题:脏读、不可重复读、幻读

                                ② read committed:读已提交                       //Oracle默认的是read committed

                                        产生的问题:不可重复读、幻读

                                ③ repeatable read:可重复读                      //MySQL默认的是repeatable

                                        产生的问题:幻读

                                ④ serializable:串行化

                                        可以解决所有问题

                                * 注意隔离级别从小到大安全性越来越高,但是效率越来越低

                                * 数据库查询隔离级别:select @@tx_isolation;

                                * 数据库设置隔离级别:set global traction isolation level 级别字符串;

                                    //注意数据库设置隔离级别后不会立即生效,需要关闭当前页面再重新打开才会生效。

 

 

补充DCL:

        DBA:数据库管理员

        DCL:管理用户,授权

                1、管理用户:添加用户:create user ’用户名‘@‘主机名’  IDENTIFIED BY ‘密码’;

                                        删除用户:Drop user ‘用户名’@‘主机名’;

                                        修改用户密码:两种方式:① update user set password('新密码') where user = '用户名';

                                                                                   ② set password for '用户名'@‘主机名’ = password('新密码');

                                                在MySQL中忘记root的密码?

                                                        1、net stop mysql;                //停止MySQL运行,需要提供管理员权限

                                                        2、使用无验证方式启动mysql服务:

                                                        3、打开新的cmd窗口,直接输入mysql敲回车,登录成功,再修改一下root密码

                                                        4、关闭窗口

                                                        5、打开任务管理器,手动结束mysqld.exe进程

                                                        6、通过cmd启动mysql服务

                                                        7、使用新密码登录

                                        查询用户:use mysql;        select * from user;

                        注意:通配符%表示可以在任意主机使用用户登录数据库

                2、权限管理

                        ① 权限查询:show grants for ‘用户名’@‘主机名’;

                        ② 授予权限:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

                                               授予所有权限:grant all on *.* to '用户名'@’主机名‘;

                        ③ 撤销权限:revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值