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