zoukankan      html  css  js  c++  java
  • MySQL数据库02

    MySQL数据库 

    前言:

      前面我们了解了什么是数据库,什么是MySQL数据库以及如何运用,接下来我们接着深入学习MySQL。

      (提前声明,以下所提供的事例不标准,仅供参考)

    数据库的备份与还原:

      备份: 在cmd中输入 mysqldump -u root -p 数据库名称 > 备份路径

      还原:两种方法

      ①: mysql -u root -p 数据库名称 < 备份路径

        (这个实例,我事先删除了smbms的数据库并重新导入)

      ②: 第一步:在服务器内创建一个数据库

         第二步:source 还原数据库的地址

      当然你也可以更简单,使用可视化工具直接备份和还原。

    多表设计之外键的约束:

    约束的作用:保证数据的完整性

    单标约束:主键、唯一、非空

    外键约束:用来保证数据完整性(多表之间)

    添加外键约束:alter table 指向的表名 add foreign key (指向的键) references 被指向的表名(被指向的键);

     

    具体示例:

     

     

     

    表与表的关系:一对多、多对多、一对一

    一对多:在多的一方创建外键指向一的一方主键。

     

    多对多:需要创建第三张表(中间表),在中间表中至少两个字段分别作为外键,指向多对多双方的主键。

     

     

    一对一:两种方式:

    ①唯一外键对应的方式:假设一对一是一个一对多关系,需要在多的一方创建外键指向一的一方的主键,将外键设置为唯一。

    ②主键对应方式:将两个表的主键建立对应关系即可。

     

    多表查询的分类:连接查询、子查询

    ①连接查询:

    (1)交叉查询:查询到的是两个表的笛卡尔积。

    select * from 表1 cross join 表2; select * from 表1,表2;

    (这里主要看id,这个事例不标准,仅供参考)

     

     

    (2)内连接:inner join  (inner 可以省略)

    • 显示内连接:

    select * from 表1 inner join 表2 on 关联条件;

     

     

    • 隐式内连接:

    select * from 表1,表2 where 关联条件;

     

    (3)外连接:outer join (outer可有省略)

    【这里注意看左外连接和右外连接的事例区别】

    • 左外连接:

    select * from 表1 left outer join 表2 on 关联条件;

     

     

    • 右外连接:

    select * from 表1 right outer join 表2 on 关联条件

     

    ②子查询:一个查询语句条件需要依赖另一个查询语句的结果。

    • 带in的子查询
    • 带exists的子查询
    • 带any的子查询
    • 带all的子查询

    事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败

    开启事务: start transaction;
    提交事务: commit;
    回滚事务: rollback;

    事务的四大特性:
    原子性:事务的不可分割,组成事务的各个逻辑单元不可分割
    一致性:事务执行的前后,数据完整性保持一致
    隔离性:事务执行不应该受到其他事务的干扰
    持久性:事务一旦结束,数据就持久化到数据库中

    事务的隔离级别:
    安全问题主要体现在读取数据上:脏读、不可重复读、虚读/幻读

    脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致。
    不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。
    虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。

    解决方法:设置事务的隔离级别: 级别由上到下依次增强,但是读取速度依次下降。
    read uncommitted:脏读,不可重复读,虚读都有可能发生。
    read committed:避免脏读。但是不可重复读和虚读是有可能发生的
    repeatable read:避免脏读和不可重复读,但是虚读有可能发生。
    serializable:避免脏读,不可重复读,虚读。

    设置事务的隔离级别: SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;
    查看当前的隔离级别: SELECT @@tx_isolation;

    注意:不同版本的mysql,查看隔离级别语法不同!

    上面那个是旧版的,新版的:SELECT @@transaction_isolation;

    否则会报错:ERROR 1193 (HY000): Unknown system variable 'tx_isolation'

     (关于事务可以自己去尝试)

     

    小结:

      以上就是多表和事务的介绍了,希望能对各位有所帮助。

                                加油

                            时间:2020-03-28 15:39:33

  • 相关阅读:
    PHP-------抽象和接口
    MySQL函数
    MySQL索引
    MySQL语法
    MySQL视图、事务
    最简洁粗暴版的虚拟用户配置FTP
    linux网络bond技术
    CentOS 7服务
    Nginx 基础
    shell 截取指定的字符串
  • 原文地址:https://www.cnblogs.com/Charles-H/p/Learning_MYSQL02.html
Copyright © 2011-2022 走看看