MySQL 8.4 Release Notes
1.7.3 MySQL 如何处理约束
MySQL 允许您同时工作于事务表和非事务表。由于这个原因,约束处理在 MySQL 中与其他 DBMSs 不同。我们必须处理在非事务表中插入或更新了很多行,但发生错误时无法回滚的情况。
基本思想是 MySQL 服务器在解析要执行的语句时尽量检测错误,并在执行语句时尽量恢复错误。我们大多数情况下这样做,但是还没有全部实现。
MySQL 在发生错误时有两个选择:中止语句或尽量恢复然后继续。默认情况下,服务器采取后者。这意味着,例如,服务器可能将无效值强制转换为最接近的有效值。
有多个SQL模式选项可供使用,以提供更好的控制方式来处理错误数据值和出错时的语句执行或中止。这些选项可以让MySQL服务器像其他DBMS那样拒绝不合法的输入。SQL模式可以在服务器启动时全局设置,影响所有客户端。单个客户端也可以在运行时设置SQL模式,从而使每个客户端选择最适合其需求的行为。请参阅第7.1.11节,“服务器SQL模式”。
以下部分描述了MySQL服务器处理不同类型约束的方式。