2020.4.23 Mysql Day2

发布于 2020-04-22  15 次阅读


1.复习内容

2.灵感代办

  • 找数据库笔记
  • 金山打字通 练习指法

3.学习内容

  • Mysql 高级

    • 外键(foregin key)重要

      • 外键定义:

        • 当前表字段的值,要和另一个表其中一个字段的内容对应
        • 从表:参照表
        • 主表:被参照表
        • 级联动作:主表操作从表跟着做什么动作
      • 外键语法:

        • foreign key() //从表的参考字段
        • references 主表(被参考字段名)
        • on delete 级联动作
        • on update 级联动作(针对参考字段id改变)
        • 注意:级联动作非必须
    • 级联动作 (必须背)

      • cascade

        • 数据级联删除,更新(参考字段)
        • 删除是跟着都删除
        • 更新是管理主键被更改,才更新
      • restrict(默认)

      • 从表有相关记录,主表的字段就不能删除
      • set null

        • 主表删除,更新,从相关联的字段记录值为null
    • 外键使用规则:

      • 主表从表字段类型要一致
      • 主表被参考字段:KEY的一种,一般是主键
      • KEY :PRI UNI
    • 删除外键

      • ALTER TABLE 表名 drop foreign key 外键名;
    • 查看外键:

      • SHOW CREATE TABLE 表名;
  • Mysql高级查询

    • 嵌套查询

      • 定义:
        • 查询里面带查询
        • 把内层的查询结果作为外层的查询条件
      • 语法格式
        • select ... from 表名 where 条件(select ....);
    • 笛卡尔积(重要)

      • select 字段名列表 from 表名列表
      • 拿前一个表和后一个表匹配
      • 每个表的每一条记录和另一个表都组合在一起
      • 多表查询就是笛卡尔积上进行筛选
    • 多表查询

      • select 字段名列表 from 表名列表 where 条件
      • 一定有相关联的字段可以联系
      • 浪费很多的资源,效率很低,笛卡尔积的缺点
      • 能用连接查询的尽量用连接查询;
    • 连接查询

      • 跟多表查询差不多,把where条件都换成inner join 表名 on 条件
      • 能用连接查询的尽量用连接查询;
      • 内连接
        • select 字段名 from 表1 inner join 表2 on 条件 inner join 表3 on 条件
        • 内连接的inner 关键字可以省略
      • 左外链接
        • 以左表为主显示结果,右表不符合就是null
        • select 字段名 from 表1 left join 表2 on 条件 left join 表3 on 条件
      • 右外连接
        • 以右表为主显示结果,左边不符合就是Null
        • select 字段名 from 表1 right join 表2 on 条件 right join 表3 on 条件
    • 数据导入

      • 把文件系统的内容导入到数据库中(例如CSV)
        • 语法(方式一)

          • load data infile “目录/文件名”
          • into table 表名
          • fields terminated by “分隔符”
          • lines terminated by “\n”
        • 语法(方式二)

          • source 文件名.sql
    • 数据导出

      • 把数据库的数据导出到文件中
        • 语法格式

          • select … from 表名
          • into outfile “文件名”
          • fields terminated by “分隔符”
          • lines terminated by “分隔符”
    • 表的复制

      • 语法

        • create table 表名 select 查询命令;
        • 复制表的时候不会把原有表的KEY属性复制过来(主键,索引,唯一)
        • 复制表结构
          • create table 表名 select 查询命令 where false;
    • Mysql 锁(自动加锁释放锁)

      • 目的:

        • 解决客户端并发的冲突问题(也很耗费资源)
      • 锁类型分类:

        • 读锁(读,共享锁):

          • select 查询的时候就加了锁
          • 加读锁之后别人不能更改表记录,但可以查询
        • 写锁(互斥,排他锁):

          • 加锁之后不能写不能读
      • 锁粒度分类

        • 表级锁:
          • 锁一张表
          • myisam
        • 行级锁:
          • 锁一行
          • innodb

4.扩展延伸知识

5.知识内容个人梳理

6.今天都复习了之前的什么内容


Ares个人进阶之路