box.space.create_check_constraint()
Предупреждение
This function was removed in 2.11.0. The check constraint mechanism is replaced with the new tuple constraints. Learn more about tuple constraints in Constraints.
-
object
space_object
¶ -
space_object:
create_check_constraint
(check_constraint_name, expression)¶ Создание проверочного ограничения. Проверочное ограничение — это требование, которое должно соблюдаться при вставке или обновлении кортежа в спейсе. Проверочные ограничения, созданные с помощью
space_object:create_check_constraint
действуют так же, как проверочные ограничения, которые были созданы при помощи оператора SQL CHECK() в выражении CREATE TABLE.Параметры: - space_object (
space_object
) – ссылка на объект - check_constraint_name (
string
) – имя проверочного ограничения, которое должно соответствовать правилам именования объектов - expression (
string
) – SQL-код выражения, которое должно возвращать результат типа boolean
возвращает: объект проверочного ограничения
тип возвращаемого значения: check_constraint_object
Спейс должен быть форматирован с помощью space_object:format(), чтобы выражение могло содержать имена полей. Спейс должен быть пустым. Спейс не должен быть системным.
Выражение должно возвращать true или false и должно быть детерминированным. Это может быть любое SQL-выражение (не Lua), которое содержит имена полей, встроенные имена функций, литералы и операторы. Не подзапросы. Если имя поля содержит символы нижнего регистра, его следует заключить в «двойные кавычки».
Проверка ограничений производится перед выполнением запроса, одновременно с Lua-триггерами before_replace. При наличии двух и более проверочных ограничений или триггеров before_replace они упорядочиваются по времени создания. (Это изменение предыдущего поведения проверочных ограничений, которое вызывало проверку до формирования кортежа).
Проверочные ограничения можно удалить с помощью
space_object.ck_constraint.check_constraint_name:drop()
.Проверочные ограничения можно отключить с помощью
space_object.ck_constraint.check_constraint_name:enable(false)
илиcheck_constraint_object:enable(false)
. Проверочные ограничения можно включить с помощьюspace_object.ck_constraint.check_constraint_name:enable(true)
илиcheck_constraint_object:enable(true)
. По умолчанию, проверочное ограничение включено, то есть при выполнении запроса производится проверка, но его можно отключить, то есть проверка производиться не будет.В процессе восстановления, например при запуске Tarantool-сервера, проверка производится, только если указан параметр force_recovery.
Пример:
box.schema.space.create('t') box.space.t:format({{name = 'f1', type = 'unsigned'}, {name = 'f2', type = 'string'}, {name = 'f3', type = 'string'}}) box.space.t:create_index('i') box.space.t:create_check_constraint('c1', [["f2" > 'A']]) box.space.t:create_check_constraint('c2', [["f2"=UPPER("f3") AND NOT "f2" LIKE '__']]) -- Этот запрос вставки не выполнится, выражение с ограничением c1 возвращает false box.space.t:insert{1, 'A', 'A'} -- Этот запрос вставки не выполнится, выражение с ограничением c2 возвращает false box.space.t:insert{1, 'B', 'c'} -- Этот запрос вставки выполнится, оба выражения с ограничениями возвращают true box.space.t:insert{1, 'B', 'b'} -- Этот запрос обновления не выполнится, выражение с ограничением c2 возвращает false box.space.t:update(1, {{'=', 2, 'xx'}, {'=', 3, 'xx'}})
Список проверочных ограничений представлен в box.space._ck_constraint.
- space_object (
-