<div id="docs-body">
 <div class="section">
  <div class="titlepage">
   <div>
    <div>
     <h3 class="title">
      <a name="constraints">
      </a>
      1.7.3 How MySQL Deals with Constraints
     </h3>
    </div>
   </div>
  </div>
  <div class="toc">
   <dl class="toc">
    <dt>
     <span class="section">
      <a href="constraint-primary-key.html">
       1.7.3.1 PRIMARY KEY and UNIQUE Index Constraints
      </a>
     </span>
    </dt>
    <dt>
     <span class="section">
      <a href="constraint-foreign-key.html">
       1.7.3.2 FOREIGN KEY Constraints
      </a>
     </span>
    </dt>
    <dt>
     <span class="section">
      <a href="constraint-enum.html">
       1.7.3.3 ENUM and SET Constraints
      </a>
     </span>
    </dt>
   </dl>
  </div>
  <a class="indexterm" name="idm46045333156480">
  </a>
  <p>
   MySQL enables you to work both with transactional tables that
        permit rollback and with nontransactional tables that do not.
        Because of this, constraint handling is a bit different in MySQL
        than in other DBMSs. We must handle the case when you have
        inserted or updated a lot of rows in a nontransactional table
        for which changes cannot be rolled back when an error occurs.
  </p>
  <p>
   The basic philosophy is that MySQL Server tries to produce an
        error for anything that it can detect while parsing a statement
        to be executed, and tries to recover from any errors that occur
        while executing the statement. We do this in most cases, but not
        yet for all.
  </p>
  <p>
   The options MySQL has when an error occurs are to stop the
        statement in the middle or to recover as well as possible from
        the problem and continue. By default, the server follows the
        latter course. This means, for example, that the server may
        coerce invalid values to the closest valid values.
  </p>
  <p>
   Several SQL mode options are available to provide greater
        control over handling of bad data values and whether to continue
        statement execution or abort when errors occur. Using these
        options, you can configure MySQL Server to act in a more
        traditional fashion that is like other DBMSs that reject
        improper input. The SQL mode can be set globally at server
        startup to affect all clients. Individual clients can set the
        SQL mode at runtime, which enables each client to select the
        behavior most appropriate for its requirements. See
   <a class="xref" href="sql-mode.html" title="7.1.11 Server SQL Modes">
    Section 7.1.11, “Server SQL Modes”
   </a>
   .
  </p>
  <p>
   The following sections describe how MySQL Server handles
        different types of constraints.
  </p>
 </div>
 <br/>
</div>
