MySQL使您既可以使用允许回滚的事务表,也可以使用不允许回滚的非事务表。因此,MySQL中的约束处理与其他DBMS中的约束处理有所不同。当您在非事务处理表中插入或更新了很多行时,如果发生错误,则无法回滚更改,则必须处理这种情况。
基本原理是,MySQL Server尝试对它在解析要执行的语句时可以检测到的任何事物产生错误,并尝试从执行该语句时发生的任何错误中恢复。在大多数情况下,我们会这样做,但并非全部。
当发生错误时,MySQL具有的选项是在中间停止语句或从问题中尽可能恢复并继续。默认情况下,服务器遵循后面的过程。例如,这意味着服务器可以将无效值强制为最接近的有效值。
有几个SQL模式选项可用来更好地控制不良数据值的处理以及在发生错误时是继续执行语句还是中止。使用这些选项,可以将MySQL Server配置为以更传统的方式运行,就像其他拒绝不正确输入的DBMS一样。可以在服务器启动时全局设置SQL模式,以影响所有客户端。各个客户端可以在运行时设置SQL模式,这使每个客户端可以选择最适合其要求的行为。请参见 第5.1.11节“服务器SQL模式”。
以下各节描述了MySQL Server如何处理不同类型的约束。