Можно ли ограничить столбец с автоинкрементом, чтобы он не принимал значения извне? - PullRequest
2 голосов
/ 19 декабря 2009

У меня есть столбец AutoIncremented (ID), и я хочу иметь ограничение, которое будет заполнять только база данных в этом столбце. Есть ли ограничение для этого?

1 Ответ

1 голос
/ 19 декабря 2009

Я не думаю, что существует декларативное ограничение, способное сделать это.

Вы можете сделать это с помощью триггера, например:

DELIMITER //

CREATE TRIGGER ForceId BEFORE INSERT ON MyTable
FOR EACH ROW
BEGIN
  SET NEW.id = DEFAULT;
END //

DELIMITER ;

Я только что проверил это на MySQL 5.1.41, и это похоже на работу. Если я указываю значение для id в своем операторе INSERT, оно игнорирует мое значение и генерирует новое значение суррогатного ключа.

INSERT INTO MyTable (id, name) VALUES (DEFAULT, 'Bill');
INSERT INTO MyTable (id, name) VALUES (123, 'John');
SELECT * FROM MyTable;
+----+-------+
| id | name  |
+----+-------+
|  1 | bill  |
|  2 | john  |
+----+-------+
...