gpt4 book ai didi

Rails 中的 Mysql 约束数据库条目

转载 作者:行者123 更新时间:2023-11-29 15:06:18 25 4
gpt4 key购买 nike

我正在使用 Mysql 5 和 Ruby On Rails 2.3.1。我有一些验证有时无法防止重复的项目保存到我的数据库中。是否可以在数据库级别限制基于某些参数创建重复条目?

我正在将电子邮件保存到数据库,并且不想保存重复的主题行、正文和发件人地址。有谁知道如何通过迁移对数据库施加这样的限制?

最佳答案

您有多种选择来确保将唯一值集插入到表中。让我们考虑 1) 将责任推给数据库引擎或 2) 您的应用程序的责任。

将责任推给数据库引擎可能需要在表上创建唯一索引。请参阅MySql Create Index syntax 。请注意,如果插入重复值,此解决方案可能会导致引发异常。当您已经确定了我推断的三列来确定唯一性(主题行、正文和发件人地址)时,您将创建索引以包含所有三列。自从我使用 Rails 以来已经有一段时间了,因此您可能还想检查插入的记录数。

如果您希望将此责任推给您的应用程序软件,您将需要应对潜在的数据插入冲突。也就是说,假设您有两个用户同时创建一封具有相同主题行、正文和发送地址的电子邮件(只需在此处与我合作)。如果您的代码简单查询由文本组成的任何记录(本示例中的两个用户都相同),则两者都将返回未找到的记录,并且将继续愉快地插入他们的电子邮件,这现在违反了您的前提。因此,您可以使用表锁或数据库中的其他同步字段来解决此问题,以确保不会出现重复项。后一种方法可以包含另一个表,该表具有单个字段,指示某人是否正在插入记录,一旦完成,它就会更新该记录以表明它已完成,然后其他人可以继续。

虽然您可以就每个替代方案的含义进行单独的架构讨论,但我会将其留给单独的帖子。希望这足以回答您的问题。

关于Rails 中的 Mysql 约束数据库条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com