mysql - Perl MySQL - 如果特定字段匹配,如何跳过更新或插入行?

标签 mysql perl duplicate-data

我对此很陌生,很抱歉我缺乏知识。

我设置了几个表,我已经成功写入并使用 CGI 和 DBI 模块通过 Perl 脚本访问这些表,感谢这里的建议。

这是本地乐队通讯的成员列表。是的,我知道,那里有很多应用程序,但我想学习这个。

1- 如果我的输入与一个特定列/字段中的列数据匹配,我想避免更新或插入一行。

在 phpmyadmin 中创建表时,我在结构 View 中单击了该列名称上的“U”(唯一)。 这似乎行得通并且没有插入任何欺骗,但是,我想要一个硬编码的 Perl 解决方案,所以我理解它的机制。

我阅读了“插入忽略”/“更新忽略”并进行了全面搜索,但是,我发现的所有内容似乎都不仅仅是跳过了一个骗局。

该列不是键或 autoinc,只是一个带有电子邮件地址的普通旧字段。 (错误?)

2- 当我写入数据库时​​,如果传入的电子邮件地址与该字段中的地址匹配,我什么都不做。

我想要最快的方法,这样我就可以循环遍历他们现有的列表导出数据,(他们无法弄清楚软件)没有竞争/锁定问题或我明显无知的任何情况。

由于我是从头开始创建的,因此 1 和 2 实际上可能部分没有实际意义。如果是这样,最好的方法是什么?

我仍然想要一个自动递增的 ID,所以我可以通过 ID 号访问或使用某种 count++ foreach 循环访问。

我的石刀方法可能会让这里的大师们感到可笑,但是,我需要从某个地方开始。

预先感谢您的帮助。

最佳答案

通过声明 UNIQUE 的电子邮件地址列,INSERT IGNORE 正是您想要插入的内容。听起来您已经知道如何做正确的事了!

(您可以在 perl 中执行“如果它已经存在则不插入”功能,但是很难做到正确,因为您必须将测试和更新包装在一个事务中。关系型数据库的一大优势数据库是它会为你执行这样的约束检查,即使你的应用程序有问题也能确保数据完整性。)

对于更新,我不确定“更新忽略”会是什么样子。 WHERE 子句中的什么限制您的 UPDATE 仅影响所需的 1 行?也许你提到的 auto_increment 主键?例如,如果你想写,

UPDATE members SET firstname='Sue' WHERE member_id = 5;

然后我认为你想要的这个“更新忽略”功能可能就像

UPDATE members SET firstname='Sue' WHERE member_id = 5
    AND email != 'sue@example.com';

这是一件奇怪的事情,但这是我对你的意思的最佳猜测:)

关于mysql - Perl MySQL - 如果特定字段匹配,如何跳过更新或插入行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996695/

相关文章:

html - 在不执行 GET 的情况下检查重复内容

php - MySQL查询错误-保留字

perl - 在 Perl 脚本中使用来自 YAML 配置文件的数据的简单示例

php - CAKEPHP 条件或声明

perl - Perl 中的 "Use of uninitialized value in scalar chomp"

perl - 如何将大量数据保存到Excel文件中?

seo - 内容复制和搜索引擎

mysql - 重复记录选择一次

javascript - 从 mysql 数据库加载特定行数并添加加载更多功能

php - 当我无法使用 PDO 且使用 MySQL 时,我应该使用 pear MDB2 还是 pear DB_DataObject?