# MySQL处理约束的方式

**URL:** <https://www.isharkfly.com/t/mysql/7921>\
**Category:** 数据库\
**Created:** [August 25, 2013, 6:12pm UTC](https://www.isharkfly.com/t/mysql/7921 "2013-08-25T18:12:55Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [August 25, 2013, 6:12pm UTC](https://www.isharkfly.com/t/mysql/7921/1 "2013-08-25T18:12:55Z")

</div>

使用MySQL，你可以使用允许回滚的事务表，以及不允许回滚的非事务表。因此，在MySQL中的约束处理功能与其他DBMS中的略有不同。在非事务性表中插入或更新大量行时，当出现错误以至于不能回滚所作的变更时，必须处理该情况。

其基本原理在于，在解析将要执行的语句的同时，MySQL服务器会尽量为检测到的问题生成错误信息，并会在执行语句的同时尽量恢复出现的错误。在大多数情况下我们均是这样作的，但不包括所有情况。

出现错误时，MySQL可选择中途中止语句，或尽可能恢复并继续执行语句。默认情况下，服务器将采取后一种路线。这意味着，服务器可能会强制将非法值变为最接近的合法值（例如）。

从MySQL 5.0.2开始，提供了数种SQL模式，使用它们，能够对如何接受可能为不良数据值的方式进行更好的控制，也能在出现错误时，对是否继续执行语句或放弃语句进行控制。使用这些选项，能够将MySQL服务器配置为更为传统的风格，类似于拒绝不恰当输入的其他DBMS。可以在运行时设置SQL模式，这样，各客户端就能选择与其需求最为贴切的行为。
