2009-12-19 2 views
2

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

+0

Не могли бы вы описать «Снаружи» –

+0

Я бы хотел, чтобы любой INSERT в этот стол с плохими данными потерпел неудачу. – ripper234

+0

Я всегда думал, что когда вы определяете столбец как автоматическое приращение, и попытка установить столбец со вставкой не удастся, поэтому массовые сценарии импорта отключаются, прежде чем устанавливать все эти данные. Я мог ошибаться. Я полагаю, вы пытались это сделать, и это сработало? Какой вкус sql? – Charles

ответ

1

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

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

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 | 
+----+-------+ 
Смежные вопросы