2
我有一个AutoIncremented列(ID),我想有一个约束,只有数据库填充此列。这是否有限制?我可以将AutoIncremented列限制为不接受来自外部的值吗?
我有一个AutoIncremented列(ID),我想有一个约束,只有数据库填充此列。这是否有限制?我可以将AutoIncremented列限制为不接受来自外部的值吗?
我不认为有一个声明约束可以做到这一点。
您可以使用触发器做,例如:
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 |
+----+-------+
你能否描述“外部” – 2009-12-19 16:59:53
我想任何插入到表中的数据不好,以失败。 – ripper234 2009-12-19 17:02:18
我一直认为,当你定义一列作为自动增量,并试图设置列插入将失败..这就是为什么批量导入脚本禁用之前设置所有的数据..我可能是错的。我假设你试图做到这一点,它的工作?什么sql味道? – Charles 2009-12-19 17:06:42