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

1.7.3 MySQL 如何处理约束

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

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

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

有几个 SQL 模式选项可用,以便更好地控制处理错误数据值的方式以及在发生错误时是否继续执行语句或中止执行。使用这些选项,您可以配置 MySQL 服务器以更传统的模式运行,这类似于其他拒绝不正确输入的 DBMS。可以在服务器启动时全局设置 SQL 模式,以影响所有客户端。各个客户端可以在运行时设置 SQL 模式,这使每个客户端能够选择最适合其需求的行为。参见 第 7.1.11 节,“服务器 SQL 模式”

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