2009-12-19 10 views
2

J'ai une colonne AutoIncremented (ID), et je veux avoir une contrainte que seulement la base de données remplit jamais dans cette colonne. Y a-t-il une contrainte pour cela?Puis-je empêcher une colonne AutoIncremented d'accepter des valeurs provenant de l'extérieur?

+0

pouvez-vous décrire "Outside" –

+0

Je voudrais n'importe quel INSERT dans cette table avec de mauvaises données pour échouer. – ripper234

+0

J'ai toujours pensé que lorsque vous définissez une colonne comme incrément automatique, et que vous essayez de définir la colonne avec l'insertion échouera .. ce qui explique pourquoi les scripts d'importation en vrac le désactivent avant de définir toutes ces données. Je suppose que vous avez essayé de le faire et cela a fonctionné? Quelle saveur sql? – Charles

Répondre

1

Je ne pense pas qu'il existe une contrainte déclarative qui puisse le faire.

Vous pouvez le faire en utilisant un déclencheur, par exemple:

DELIMITER // 

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

DELIMITER ; 

Je viens de tester cela sur MySQL 5.1.41 et il semble fonctionner. Si je spécifie une valeur pour id dans mon instruction INSERT, il ignore ma valeur et génère une nouvelle valeur de clé de substitution.

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 | 
+----+-------+