SQL核心知识复习

一般查询语句

select 查询列表
from   表1  别名  [连接类型]
join   表2  别名 #jion指出加入的表
on  连接条件    #on中指出连接表的条件
[where   筛选条件]
[group by]
[having]
[order by]
[limit a,b]  # 如果欧就是在最后

SQL 事务

SQL事务是数据库管理系统执行过程中的一个逻辑单元,它由一个或多个SQL语句组成。事务内的语句要么全部执行成功,要么全部不执行,这是为了确保数据库系统从一个一致性状态转移到另一个一致性状态。SQL事务具有以下四个标准属性,通常被称为ACID属性:

  1. 原子性(Atomicity)
    原子性确保事务内的所有操作要么全部完成,要么全部不完成。在事务执行过程中如果出现错误或者其他一些中断,那么事务内执行的所有操作都会被回滚到事务开始之前的状态,就像这些操作从未被执行过一样。

  2. 一致性(Consistency)
    一致性意味着数据库在事务开始和完成时,必须从一个一致的状态转变到另一个一致的状态。事务执行的过程中不能破坏数据库的完整性和业务规则。

  3. 隔离性(Isolation)
    隔离性保证了并发事务的操作是独立的。即使多个事务同时执行,每个事务也应该与其他事务隔离,以防止事务之间的相互干扰,比如防止脏读、不可重复读和幻读等现象的发生。

  4. 持久性(Durability)
    持久性意味着一旦事务被提交,它对数据库中数据的改变就是永久性的。即使发生系统故障,数据库也能够恢复到最后一次成功的事务状态。

一个典型的事务流程是这样的:

  • 开始事务:通常是通过BEGIN TRANSACTION或者START TRANSACTION指令来开始。
  • 执行SQL语句:这些语句可能包括INSERTUPDATEDELETE等,用于修改数据库中的数据。
  • 提交事务:如果所有的语句都成功执行,那么通过COMMIT指令来提交事务,使得所做的更改被永久保存到数据库中。
  • 回滚事务:如果在执行过程中出现了问题,可以通过ROLLBACK指令来撤销事务中的所有操作,回到事务开始之前的状态。

通过这种方式,事务确保了数据库操作的完整性和一致性,即使在面对系统故障、并发操作等复杂场景下也能保持数据的准确性。

MySQL的主从复制(Master-Slave Replication)

基本概念和意义

MySQL的主从复制(Master-Slave Replication)是数据库领域中一种常见的数据复制方法,用于将一个数据库服务器(主服务器)上的数据实时复制到另一个或多个数据库服务器(从服务器)。这种机制的主要目的和用途包括:

数据备份:从服务器可以作为主服务器数据的实时备份,如果主服务器发生故障,可以快速切换到从服务器,以此来减少数据丢失的风险。

读写分离:在主从复制的架构中,所有写操作(INSERT、UPDATE、DELETE等)通常在主服务器上执行,而读操作(SELECT等)可以在从服务器上执行。这样可以分散数据库的负载,提高系统的查询性能和吞吐量。

故障恢复:主服务器出现故障时,可以由从服务器接管服务(经过提升为新的主服务器),维持数据库的持续可用性。

数据分布:通过主从复制,可以将数据复制到地理分布的不同服务器,提高数据局部访问的速度,降低延迟。

在线维护:进行数据库维护(如升级、修改配置等)时,可以先在从服务器上进行,测试无误后再应用到主服务器上,减少对生产环境的影响。

主从复制工作的基本原理如下:

二进制日志(Binary Log):主服务器上的所有数据变更都会记录在二进制日志中。
复制过程:从服务器连接到主服务器,并从主服务器的二进制日志中读取数据变更,然后在自己的数据库上应用相同的数据变更。
数据同步:从服务器通过定期或持续地从主服务器获取更新来保持与主服务器的数据同步。
主从复制可以是同步的,也可以是异步的。在MySQL中,标准的主从复制是异步的,即从服务器不需要确认它已经接收和应用了变更,主服务器就继续进行之后的操作。这可能会在某些情况下导致数据不一致,尤其是在主服务器发生故障时。为了解决这个问题,MySQL还提供了半同步复制(Semi-Synchronous Replication)作为一个选项,它要求至少一个从服务器必须确认已经收到数据变更,主服务器才会继续进行后续操作。这样提高了数据一致性,但可能会影响到主服务器的性能。

主从复制的同步、半同步、异步

  • 异步复制(Asynchronous Replication):

在异步复制中,当主服务器上执行了数据变更操作(如INSERT、UPDATE或DELETE),这些变更会被记录到主服务器的二进制日志中。
主服务器在记录完这些操作后,不会等待从服务器确认它已经接收并应用了这些变更,就会继续执行后续的操作。
从服务器在自己的进程中独立地读取并应用这些变更,通常会有一定的延迟。
异步复制可能导致在某一时刻,从服务器上的数据与主服务器不完全一致,尤其是当主服务器发生故障时,最新的变更可能还没有被复制到从服务器。

  • 半同步复制(Semi-Synchronous Replication):

半同步复制是异步复制的一个改进,在这种复制模式下,主服务器在执行数据变更后,会将变更写入自己的日志,然后等待至少一个从服务器确认它已经接收到这些变更。
一旦至少一个从服务器确认收到变更,主服务器才继续处理新的操作。这样可以保证至少有一个从服务器有机会应用这些变更,即使主服务器出现问题,数据也不会丢失。
这种方式提高了数据的一致性,但可能会增加主服务器上的写操作的延迟,因为它需要等待从服务器的确认。

  • 同步复制(Synchronous Replication):

在同步复制中,主服务器上的数据变更会同时在从服务器上进行,主服务器必须等待一个或多个从服务器确认数据变更已经被应用,才能认为操作完成。
这种复制方式可以确保在任何给定时间点,主服务器和从服务器的数据都是完全一致的。
同步复制通常对性能产生较大影响,因为它需要在网络上等待确认,这样会显著增加事务的响应时间。
同步复制常用于对数据一致性要求极高的系统中。

MySQL 慢查询

MySQL中的慢查询是指执行时间超过特定阈值的SQL语句。MySQL提供了慢查询日志(slow query log)的功能,用来记录那些执行时间超过long_query_time值的查询。这个功能对于数据库性能调优非常有帮助,因为它可以帮助识别和优化潜在的低效查询。

MySQL 执行计划