Схема информации CHECK_CONSTRAINTS
Таблица схемы информации CHECK_CONSTRAINTS хранит метаданные о ограничениях, определённых для таблиц во всех базах данных.
Она содержит следующие столбцы:
| Столбец | Описание |
|---|---|
CONSTRAINT_CATALOG |
Всегда содержит строку 'def'. |
CONSTRAINT_SCHEMA |
Имя базы данных. |
CONSTRAINT_NAME |
Имя ограничения. |
TABLE_NAME |
Имя таблицы. |
LEVEL |
Тип ограничения ('Столбец' или 'Таблица'). От MariaDB 10.5.10 |
CHECK_CLAUSE |
Оператор ограничения. |
Пример
Таблица с числовым табличным ограничением проверки и с именем по умолчанию для ограничения проверки:
CREATE TABLE t ( a int, CHECK (a>10));
Чтобы увидеть вызов ограничения проверки, обратитесь к таблице check_constraints из схемы информации.
SELECT * from INFORMATION_SCHEMA.CHECK_CONSTRAINTS\G
*************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: test
CONSTRAINT_NAME: CONSTRAINT_1
TABLE_NAME: t
CHECK_CLAUSE: `a` > 10
Новое табличное ограничение проверки под названием a_upper:
ALTER TABLE t ADD CONSTRAINT a_upper CHECK (a<100);
SELECT * from INFORMATION_SCHEMA.CHECK_CONSTRAINTS\G
*************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: test
CONSTRAINT_NAME: CONSTRAINT_1
TABLE_NAME: t
CHECK_CLAUSE: `a` > 10
*************************** 2. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: test
CONSTRAINT_NAME: a_upper
TABLE_NAME: t
CHECK_CLAUSE: `a` < 100
Новая таблица tt с ограничением проверки поля под названием b, а также табличным ограничением проверки под названием b_upper:
CREATE TABLE tt(b int CHECK(b>0),CONSTRAINT b_upper CHECK(b<50)); SELECT * from INFORMATION_SCHEMA.CHECK_CONSTRAINTS; +--------------------+-------------------+-----------------+------------+--------------+ | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_NAME | CHECK_CLAUSE | +--------------------+-------------------+-----------------+------------+--------------+ | def | test | b | tt | `b` > 0 | | def | test | b_upper | tt | `b` < 50 | | def | test | CONSTRAINT_1 | t | `a` > 10 | | def | test | a_upper | t | `a` < 100 | +--------------------+-------------------+-----------------+------------+--------------+
Примечание: Имя ограничения поля совпадает с именем поля.
После удаления табличного ограничения по умолчанию под названием CONSTRAINT_1:
ALTER TABLE t DROP CONSTRAINT CONSTRAINT_1; SELECT * from INFORMATION_SCHEMA.CHECK_CONSTRAINTS; +--------------------+-------------------+-----------------+------------+--------------+ | CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_NAME | CHECK_CLAUSE | +--------------------+-------------------+-----------------+------------+--------------+ | def | test | b | tt | `b` > 0 | | def | test | b_upper | tt | `b` < 50 | | def | test | a_upper | t | `a` < 100 | +--------------------+-------------------+-----------------+------------+--------------+
Попытка вставить неверные аргументы в таблицу t и tt приводит к ошибке.
INSERT INTO t VALUES (10),(20),(100); ERROR 4025 (23000): CONSTRAINT `a_upper` failed for `test`.`t` INSERT INTO tt VALUES (10),(-10),(100); ERROR 4025 (23000): CONSTRAINT `b` failed for `test`.`tt` INSERT INTO tt VALUES (10),(20),(100); ERROR 4025 (23000): CONSTRAINT `b_upper` failed for `test`.`tt`
От MariaDB 10.5.10:
create table majra(check(x>0), x int, y int check(y < 0), z int,
constraint z check(z>0), constraint xyz check(x<10 and y<10 and z<10));
Query OK, 0 rows affected (0.036 sec)
show create table majra;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| majra | CREATE TABLE `majra` (
`x` int(11) DEFAULT NULL,
`y` int(11) DEFAULT NULL CHECK (`y` < 0),
`z` int(11) DEFAULT NULL,
CONSTRAINT `CONSTRAINT_1` CHECK (`x` > 0),
CONSTRAINT `z` CHECK (`z` > 0),
CONSTRAINT `xyz` CHECK (`x` < 10 and `y` < 10 and `z` < 10)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
select * from information_schema.check_constraints where table_name='majra';
+--------------------+-------------------+------------+-----------------+--------+------------------------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | TABLE_NAME | CONSTRAINT_NAME | LEVEL | CHECK_CLAUSE |
+--------------------+-------------------+------------+-----------------+--------+------------------------------------+
| def | test | majra | y | Column | `y` < 0 |
| def | test | majra | CONSTRAINT_1 | Table | `x` > 0 |
| def | test | majra | z | Table | `z` > 0 |
| def | test | majra | xyz | Table | `x` < 10 and `y` < 10 and `z` < 10 |
+--------------------+-------------------+------------+-----------------+--------+------------------------------------+
4 rows in set (0.001 sec)
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/information-schema-check_constraints-table/