MySql 中文参考指南

1.7.3 How MySQL Deals with Constraints

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

基本原则是,MySQL Server 会尝试对任何在解析要执行的语句时可以检测到的内容产生一个错误,并尝试从执行语句时发生的任何错误中恢复。在大多数情况下,我们都会这样做,但尚未对所有情况都这样做。

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

提供了几种 SQL 模式选项,以更好地控制处理错误数据值,以及当发生错误时是继续语句执行还是中止。使用这些选项,您可以将 MySQL Server 配置为以更传统的方式运行,就像拒绝不当输入的其他 DBMS 一样。可以在服务器启动时全局设置 SQL 模式,以影响所有客户端。各个客户端可以在运行时设置 SQL 模式,这样每个客户端都可以选择最适合其要求的行为。请参阅 Section 7.1.11, “Server SQL Modes”

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