2009-12-19 35 views
2

我有一个AutoIncremented列(ID),我想有一个约束,只有数据库填充此列。这是否有限制?我可以将AutoIncremented列限制为不接受来自外部的值吗?

+0

你能否描述“外部” – 2009-12-19 16:59:53

+0

我想任何插入到表中的数据不好,以失败。 – ripper234 2009-12-19 17:02:18

+0

我一直认为,当你定义一列作为自动增量,并试图设置列插入将失败..这就是为什么批量导入脚本禁用之前设置所有的数据..我可能是错的。我假设你试图做到这一点,它的工作?什么sql味道? – Charles 2009-12-19 17:06:42

回答

1

我不认为有一个声明约束可以做到这一点。

您可以使用触发器做,例如:

DELIMITER // 

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

DELIMITER ; 

我只是测试这在MySQL 5.1.41和它似乎工作。如果我在INSERT语句中指定id的值,它将忽略我的值并生成新的代理键值。

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 | 
+----+-------+ 
相关问题