当前位置: 首页 > 面试题库 >

将MySQL数据类型的值限制为特定范围(最好不是ENUM)

汪和悌
2023-03-14
问题内容

我想将可以存储在字段中的数据类型值限制为整数值的特定范围:[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;

我希望有人能提供帮助。


问题答案:

您可以创建一个允许投票值的表并在投票表中添加一个外键,因此,当您尝试使用user_vote值(而不是allowed_votes表中现有的值)插入投票时,会遇到约束失败错误:

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);


 类似资料:
  • 问题内容: 上面的查询将返回前10个等级。 如何修改,或者是否存在另一种语法来查询第10位到第20位? 问题答案: 这真的是基本的东西。您应该使用: http://dev.mysql.com/doc/refman/5.5/en/select.html 两个参数10,10是(Offset,Limit),因此它将检索第11-20行。 9,11将需要获得第10-20名。

  • 问题内容: 我正在创建一个移动模拟器,该模拟器使用100%javascript,HTML5和CSS在Web浏览器中模拟iPhone(以及以后的其他设备)的外观和功能,并且该模拟器仅使用客户端代码即可完全起作用。 在尝试通过对原始应用程序项目本身进行少量修改而完成此任务的同时,将其托管在模拟器中,我将and 标记注入页面的顶部,然后将html加载到屏幕中。 问题是,当我加载一个新的CSS文件时,(显

  • 问题内容: 数据输入: 存储过程的相关部分: 错误:将varchar数据类型转换为datetime数据类型导致值超出范围。 这是CONVERT(DATETIME)的唯一调用,并且我不使用CAST 如果我只是直接传递数据,则会插入该行。如果我运行该存储过程,它将超出范围。 问题答案: 在SQL Server中使用的安全日期时间字符串格式为 或。 如果SET DATEFORMAT为dmy,则转换将失败

  • 我有一个搜索屏幕,允许用户搜索信息,并填充一个网格。一些搜索结果返回了大量数据。我正在尝试创建一个分页网格,以便一次只能从存储过程中获得10或20个结果。(我在UI中已经有了一个分页网格) 我正在尝试这样做: 上面的查询将只返回前20条记录。我如何在Sybase ASE中实现这一点?不幸的是,对于我的客户项目,我们使用的是Sybase。我知道在其他数据库引擎中,我们可以使用我上面提到的查询。我也知

  • ■ 问题定义_________________________ <代码>!! 我设计了一个灵活但记忆效率高的类,它适合各种情况,其中只有选择性特征:链接 另外,我为每个特性提供了ID,当用户只想请求类的特定特性时,可以使用该ID。 我编写了自己的类来满足这些属性,使用可变参数模板的未命名枚举的多个继承。 见下文: ▼TriTraits. h ▼ 三角形 例如,如果定义自己的三角形类型, 与按位<

  • 问题内容: 我目前有以下3个域类: User.groovy Course.groovy 大学 我使用以下代码收集了大学的所有课程: 带有这样的示例响应: 我的问题是,我想将响应范围限制为不包括 或当前正在返回的值,而只返回要在JSON中返回的列表。如何限制呢? 问题答案: 在引导程序中注册所需的JSON对象编组器,如下所示: 上面的寄存器仅返回转换并呈现​​为JSON时的字段。请注意,这将永久封送