|
|
@@ -714,6 +714,8 @@ CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
|
|
|
|
|
|
* `CHECK` - ограничение, которое проверяет, что каждое значение данных, вставляемое в столбец, удовлетворяет требованиям, указанным в ограничении. Ограничение CHECK определяет выражение, которое должно принимать значение `TRUE` или `UNKNOWN` (для NULL-значений) для значения добавляемого в столбец. Если выражение равно `FALSE`, вставка или обновление завершается неудачно, и MySQL сообщает о нарушении ограничения.
|
|
|
|
|
|
+ Полный синтаксис выглядит так: `[CONSTRAINT [symbol]] CHECK (expr)`. Необязательный параметр `symbol` позволяет задать свое название для ограничения (СУБД автоматически именует ограничения, если этот параметр не задан).
|
|
|
+
|
|
|
Ограничение `CHECK` может задаваться в определении столбца или после определений столбцов. В любом случае выражение ограничения должно придерживаться следующих правил:
|
|
|
|
|
|
- Выражение не может ссылаться на столбец, определенный с AUTO_INCREMENT, или на столбец в другой таблице.
|
|
|
@@ -731,6 +733,24 @@ CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
|
|
|
);
|
|
|
```
|
|
|
|
|
|
+ - Ограничение созданное для столбца может обращаться только к этому столбцу. Чтобы обращаться к нескольким столбцам таблицы нужно создавать CHEK на уровне таблицы (к столбцам других таблиц обращаться в CHECK нельзя):
|
|
|
+
|
|
|
+ ```sql
|
|
|
+ CREATE TABLE t1
|
|
|
+ (
|
|
|
+ -- ограничение на уровне таблицы, может отращаться к разным полям, даже если они еще не объявлены
|
|
|
+ CHECK (c1 <> c2),
|
|
|
+ -- ограничение на конкретный столбец
|
|
|
+ c1 INT CHECK (c1 > 10),
|
|
|
+ -- ограничение на конкретный столбец записанное в полном синтаксисе
|
|
|
+ c2 INT CONSTRAINT c2_positive CHECK (c2 > 0),
|
|
|
+ c3 INT CHECK (c3 < 100),
|
|
|
+ -- ещё два ограничения уровня таблицы, записанные в разном полном и кратком синтаксисе
|
|
|
+ CONSTRAINT c1_nonzero CHECK (c1 <> 0),
|
|
|
+ CHECK (c1 > c3)
|
|
|
+ );
|
|
|
+ ```
|
|
|
+
|
|
|
например:
|
|
|
|
|
|
```sql
|