在没有唯一键的情况下唯一地插入MySQL表

Bjö*_*lek 4 mysql insert unique

我想将数据唯一地插入到我的一个MySQL表中.也就是说,如果表中已经存在完全相同的条目(所有列包含相同的值),则应该取消插入操作.这可以通过定义唯一键并处理即将发生的错误来轻松完成,但我无法更改表结构.

我确信即使在没有唯一键的表中,也有一种简单的方法可以捕获它.当然,我可以SELECT提前使用语句手动检查是否存在此类记录,但可能会有同时修改我的表的并发实例(在检查与SELECT实际之间INSERT).

我想INSERT在一个SQL命令中执行检查和操作.谁能指出我正确的方向?

Abh*_*hay 5

我们假设您的表中有5列 - col1,col2,col3,col4,col5.并假设您尝试插入的这些列对应的数据是变量 - $ col1,$ col2,$ col3,$ col4,$ col5(我假设PHP是您的语言,但请修改变量格式,按照你的命名法).

所以你的插入可能看起来像:

INSERT INTO `tableA` (`col1`, `col2`, `col3`, `col4`, `col5`)
SELECT $col1, $col2, $col3, $col4, $col5
FROM `tableA`
WHERE NOT EXISTS (SELECT 1
    FROM `tableA`
    WHERE `col1` = $col1
    AND `col2` = $col2
    AND `col3` = $col3
    AND `col4` = $col4
    AND `col5` = $col5);
Run Code Online (Sandbox Code Playgroud)

另一种选择可能是:

INSERT INTO `tableA` (`col1`, `col2`, `col3`, `col4`, `col5`)
SELECT $col1, $col2, $col3, $col4, $col5
FROM `tableA`
WHERE `col1` = $col1
AND `col2` = $col2
AND `col3` = $col3
AND `col4` = $col4
AND `col5` = $col5
HAVING COUNT(1) = 0;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.