MySQL多表查询,事务和DCL操作

多表查询


笛卡儿积

语法:SELECT * FROM 表名称1,表名称2;
查询出的条目数 = 表1的条目数 * 表二的台条目数;

内连接查询

特点:查询的是表的交集部分;
隐式内连接
    语法:SELECT * FROM 表1,表2 WHERE 条件;
          SELECT 要查询的列(要哪个表的数据就用哪个表.表的列) FROM 表1(可以取别名),表2 (可以取别名) WHERE 条件;
显示内链接
    语法:SELECT * FROM 表1 INNER JOIN 表2 ON 条件;(INNER 可以省略)

外连接

左外连接
    语法:SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 条件;(OUTER 可以省略)
    结果特点:左表的全部部分+加右表的交集
右外连接
    语法:SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 条件;(OUTER 可以省略)
    结果特点:右表的全部内容+左表的交集

子查询

1.概念:查询中嵌套查询,称嵌套查询为子查询;

2.子查询的不同情况:
    1.子查询的结果是单行单列的:
        例如:查询最高工资的员工
            原始做法:
                SELECT MAX(gongzi) FROM 员工表;
                SELECT * FROM 员工表 WHERE 工资 = 查询到的结果;
            子查询:
                SELECT * FROM 员工表 WHERE 工资 = (SELECT MAX(工资) FROM 员工表);
    2.子查询的结果是多行单列的:
        主要查用IN(条件1,条件2(也就是子查询));

    3.子查询的结果是多行多列的:
        可以作为一个虚拟表进行连接查询;

事务

概念

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

操作步骤:

    开启事务 STRAT TRANSACTION;
    回滚(出问题了回到开启事务之前)ROLLBACK;
    提交(正常执行,提交事务,数据发生改变)COMMIT;

查看和修改事务的提交方式

    查看事务的提交方式
        SELECT @@autocommit;
    修改事务的提交方式
        SET @@aotocommit=0;-- 0表示手动提交,1表示自动提交

事务的四大特征

    原子性:在事务的多个SQL语句都是不可分割的,要么同时成功,要么同时失败;
    持久性:发生回滚和提交的时候,数据持久的保存再硬盘中;
    隔离性:多个事务之间,互相没有影响;
    一致性:事务前后的数据总量不会改变;

隔离级别

    1.存在的问题:
        a.脏读:一个事务中未提交的数据被另一个事务读取到;
        b.虚读(不可重复读):一个事务中,两次读取的数据不一样;
        c.幻读:一个事务在操作(DML)数据库中所有的记录,另一个事务d.在添加一条新的纪录,则第一个事务查询不到自己的修改;
    2.对应的级别:
        a.READ UNCOMMOTED;读未提交 (出现 “脏读”,“虚读”,“幻读”)
        b.READ COMMITED;读已提交(出现 “虚读”,“幻读”)Oracle数据库默认隔离级别
        c.REPEATABLE READ;可重复读(出现 “幻读”)MySQL数据库默认隔离级别
        d.SERIALIZABLE;串行化 (解决所有问题)
        注意:隔离级别随着等级提升安全性越高,效率越低;
    3.设置和查看隔离级别
        a.查看隔离级别
            SELECT @@TX_ISOLATION;
        b.设置隔离级别
            SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;

DCL管理用户

创建用户

    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';-- 主机名 本机 locahost 任意主机 %

删除用户

    DROP USER '用户名'@'主机名';

查询用户

    USE mysql;
    SELECT * FROM USER;

修改用户密码

    UPDATE USER SET PASSWORD=PASSWORD('新密码') WHERE user= '用户名';
    SET PASSWORD FOR '用户名'@'主机名'=PASSWORD('新密码');

忘记超级管理员密码

    a. cmd 输入 net stop mysql  -- 停止mysql服务 需要管理员运行该cmd
    b. 使用无验证方式启动mysql服务: mysqld --skip-grant-tables
    c. 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功
    d. use mysql;
    e. update user set password = password('你的新密码') where user = 'root';
    f. 关闭两个窗口
    g. 打开任务管理器,手动结束mysqld.exe 的进程
    h. 启动mysql服务
    i. 使用新密码登录。

数据库权限

    a.查询权限
        语法: SHOW GRANTS FOR '用户名'@'主机名';
    b.授予权限
        语法: GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';  -- 标准格式
        语法: GRANT ALL ON *.* TO 'zhangsan'@'localhost';  -- 给张三本机用户授予所有的权限
    c.撤销权限
        语法: REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
        案例: REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';  -- 撤销李四在所有机器上面的 UPDATE 权限
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值