【问题标题】:Can I constraint an AutoIncremented column not to accept values from outside?我可以限制自动增量列不接受来自外部的值吗?
【发布时间】:2009-12-19 16:56:50
【问题描述】:

我有一个 AutoIncremented 列 (ID),并且我想要一个只有数据库才会填充此列的约束。有限制吗?

【问题讨论】:

  • 你能描述一下“外面”吗
  • 我希望任何 INSERT 到该表的错误数据都失败。
  • 我一直认为,当您将列定义为自动增量并尝试使用插入设置列时会失败..这就是为什么批量导入脚本在设置所有数据之前禁用它..我可以错了。我假设您尝试这样做并且有效?什么sql味道?
  • 是的,我试过了,它可以工作,mysql。
  • " database ever fills in this column" 我认为这有点混乱,您是否想在自动增量列上设置约束,以便没有人可以以任何方式插入/更新 ID 值。

标签: sql mysql auto-increment


【解决方案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  |
+----+-------+

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多