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