php - 使用 MySQL 或 PHP 防止重复条目的正确方法

标签 php mysql sql database yii

我有一个 song 表,其中包含 songCategorysongName 列。 songCategorysongName 的组合在数据库级别设置为唯一。所以基本上即使 php 试图插入重复条目数据库也不会允许。

问题是,项目具有用户可以一次插入一堆歌曲的功能。如您所知,大数据的重复记录检查需要很长时间:对于每首歌曲,我必须查询是否有categoryID=xsongName=y 的歌曲。所以我需要你的建议来解决这个问题,而不需要额外的重复检查。

我对此没什么想法,但我不太确定它们是否可行:

  • 无论如何我们都可以插入记录,如果出现数据库错误,我们只需继续 foreach循环。
  • 我们可以在每次插入后触发数据库中的一些函数来检查和删除重复的行(我没有使用自定义 mysql 函数的经验)

顺便说一句,我正在使用 Yii Framework 和 MySQL 数据库。

你的建议?

最佳答案

您可以使用临时表。让 php 应用程序将所有内容插入临时表,然后调用具有这种逻辑的查询。

insert into mainTable 
(field1, field2, etc)
select field1, field2, etc
from tempTable 
where (subquery to check for existing records goes here)

或者您可以使用 try/catch。我不知道 php 语法,但由于许多其他语言可以做这种事情,我希望 php 也能做到。

try
code to insert record
catch
if the error code is the one for duplicate records, do nothing.
if it's something else, handle it accordingly.

关于php - 使用 MySQL 或 PHP 防止重复条目的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588344/

相关文章:

php - PHP 中单引号和双引号字符串有什么区别?

php - 在 MySQL 中创建指向服务器上存储文件的链接

仅当行已更改时,MySQL 才在更新后触发

java - 如何避免分布式系统中的数据库 ID 冲突

php - php 代码中未处理 Html 搜索栏值

PHP strcmp result int 含义

mysql - 空表上不存在返回 false

mysql - 在电子商务网站中处理产品变体

Sql Server FOR XML AUTO 并返回用户定义的表类型?

Php/MySQL if 语句根据所选值返回信息