|MariaDB before version 10.2 and MySQL before 8.0.16 accepted limited |
CHECK CONSTRAINT syntax but ignored it. Now
CHECK CONSTRAINT works ...
[CONSTRAINT [symbol_name]] CHECK ( expr ) [[NOT] ENFORCED]
symbol_name must be unique in the schema; MySQL generates a schema-unique name if none is given.
The constraint may be defined for a table or a column. In a table definition, code>expr may refer to any table column(s), but in a column definition, it may not refer to other columns.
expr must evaluate to True, False or Null, and unless
NOT ENFORCED is specified, column values for which expr returns False are rejected.
Not allowed in
- nongenerated and generated columns
- Literals, deterministic built-in functions, operators
Unless the constraint is
- stored routine parameters, system variables, user-defined variables, stored program local variables
- stored and user-defined functions
- On Update and On Delete clauses
- columns referenced in foreign keys and columns of other table
NOT ENFORCED, evaluation occurs with Insert, Update, Replace, Load Data and Load Xml. If Ignore is used, failure induces a warning, otherwiose it raises an error. If
sql_mode does not include
strict, MySQL may auto-adjust for some errors (e.g., truncation for data too long) and issue a warning.
Basic examples here.
Last updated 1 May 2019