Евгений Колесников 3 napja
szülő
commit
6a32ceb84f
1 módosított fájl, 20 hozzáadás és 0 törlés
  1. 20 0
      articles/sql_for_beginner.md

+ 20 - 0
articles/sql_for_beginner.md

@@ -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