1.8.3 MySQL 如何处理约束

MySQL 使您既可以使用允许回滚的事务 table,也可以使用不允许回滚的非事务 table。因此,MySQL 中的约束处理与其他 DBMS 中的约束处理有所不同。当您在非事务处理 table 中插入或更新了很多行时,如果发生错误,则无法回滚更改,则必须处理这种情况。

基本原理是,MySQL Server 会尝试在分析要执行的语句时对其检测到的所有内容产生错误,并尝试从执行该语句时发生的任何错误中恢复。在大多数情况下,我们会这样做,但并非全部。

当发生错误时,MySQL 具有的选项是在中间停止语句或从问题中尽可能恢复并 continue。默认情况下,服务器遵循后面的过程。例如,这意味着服务器可以将无效值强制为最接近的有效值。

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

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