MySQL 8.4 参考手册  /  ...  /  MySQL 如何处理约束

1.7.3 MySQL 如何处理约束

MySQL 支持您使用允许回滚的事务性表和不允许回滚的非事务性表。因此,MySQL 中的约束处理与其他 DBMS 略有不同。我们必须处理在非事务性表中插入或更新了大量行,并且在发生错误时无法回滚更改的情况。

基本理念是,MySQL 服务器会尝试在解析要执行的语句时检测到任何错误,并尝试从执行语句时发生的任何错误中恢复。我们在大多数情况下都会这样做,但并非所有情况都如此。

发生错误时,MySQL 的选择是停止语句或尽可能地从问题中恢复并继续执行。默认情况下,服务器采用后一种方式。例如,这意味着服务器可能会将无效值强制转换为最接近的有效值。

可以使用多个 SQL 模式选项来更好地控制错误数据值的处理方式,以及在发生错误时是继续执行语句还是中止。使用这些选项,您可以将 MySQL 服务器配置为以更传统的方式运行,就像其他拒绝不正确输入的 DBMS 一样。可以在服务器启动时全局设置 SQL 模式,以影响所有客户端。各个客户端可以在运行时设置 SQL 模式,这使得每个客户端可以选择最适合其要求的行为。请参阅 第 7.1.11 节“服务器 SQL 模式”

以下部分描述了 MySQL 服务器如何处理不同类型的约束。