簡體   English   中英

我可以約束AutoIncremented列不接受來自外部的值嗎?

[英]Can I constraint an AutoIncremented column not to accept values from outside?

我有一個AutoIncremented列(ID),並且我希望有一個約束,只有數據庫才能填充此列。 有約束嗎?

我認為沒有聲明性約束可以做到這一點。

您可以使用觸發器進行操作,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM