SQLite поддерживает два способа сделать это:
Определение ограничения CHECK
для столбца первичного ключа:
CREATE TABLE mytable (
mytable_id INT PRIMARY KEY CHECK (mytable_id BETWEEN 0 and 999)
);
Создайте триггер в таблице, который отменяет любые INSERT
или UPDATE
, которые пытаются установить для столбца первичного ключа значение, которое вам не нужно.
CREATE TRIGGER mytable_pk_enforcement
BEFORE INSERT ON mytable
FOR EACH ROW
WHEN mytable_id NOT BETWEEN 0 AND 999
BEGIN
RAISE(ABORT, 'primary key out of range');
END
Если вы используете автоматически назначенный первичный ключ, как показано выше, вам может потребоваться запустить триггер AFTER INSERT
вместо вставки. Значение первичного ключа еще не может быть сгенерировано во время выполнения триггера BEFORE
.
Возможно, вам также понадобится написать триггер на UPDATE
, чтобы люди не могли изменить значение вне диапазона. По существу, ограничение CHECK
предпочтительнее, если вы используете SQLite 3.3 или более позднюю версию.
примечание: Я не проверял код выше.