簡體   English   中英

將MySQL數據類型的值限制為特定范圍(最好不是ENUM)

[英]Limit the value of a MySQL datatype to a specific range (preferably not ENUM)

我想將可以存儲在字段中的數據類型值限制為特定范圍的整數值:[0,10]。

在PHP腳本中的用戶輸入上,我驗證並清理數據以確保它在0到10的范圍內。但是,有沒有辦法通過某種數據類型或約束來確保在投票表本身中保持這個?

目前我將int值存儲在UNSIGNED TINYINT中,當然其范圍為0-255。 我知道ENUM是一個選項。 但是,我已經讀過使用數字時不建議: http//komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

SQL:

CREATE TABLE votes (
vote_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
article_id MEDIUMINT UNSIGNED NOT NULL,
user_id MEDIUMINT UNSIGNED NOT NULL,
user_vote TINYINT UNSIGNED NOT NULL,
PRIMARY KEY (vote_id),
FOREIGN KEY (article_id) REFERENCES articles (article_id) ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT article_uservoted UNIQUE KEY (user_id, article_id),
INDEX vote_value (article_id, user_id, user_vote)
) ENGINE=INNODB;

我希望有人可以提供幫助。

您可以創建一個允許的投票值表並在您的投票表中添加一個外鍵,因此當您嘗試在allowed_votes表中插入一個user_vote值而不是現有值的投票時,您會收到一個約束失敗錯誤:

CREATE TABLE allowed_votes (
  vote_rank TINYINT UNSIGNED NOT NULL,
  PRIMARY KEY (vote_rank)
) ENGINE = InnoDB;

INSERT INTO allowed_votes( vote_rank ) VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

ALTER TABLE votes
ADD FOREIGN KEY (user_vote) REFERENCES allowed_votes (vote_rank);

暫無
暫無

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

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