SQL - 仅使用一个请求插入多个条目而不重复

时间:2018-04-14 07:22:37

标签: mysql insert duplicates

我想做什么:

  • 在现有表格中:'用户'。
  • 如果条目尚未存在,请插入一个新条目。

到目前为止,我在PHP中尝试过:

INSERT INTO `users` (`ID`, `NAME`, `CREATIONDATE`)
SELECT NULL, '$name', CURRENT_TIMESTAMP
FROM users
WHERE NOT EXISTS(
   SELECT users.NAME FROM users
   WHERE users.NAME = '$name'
)

这段代码有效;我没有重复的新条目。

问题是:

为了更加干净并保存请求数,我想只构建一个请求以避免在PHP循环中执行X INSERT INTO

E.g:

foreach ( $list as $name )
{
   $sql = "INSERT INTO `users` (`ID`, `NAME`, `CREATIONDATE`)";
   $sql .="SELECT NULL, '$name', CURRENT_TIMESTAMP FROM users
   WHERE NOT EXISTS(
       SELECT users.NAME FROM users
       WHERE users.NAME = '$name'
   )
   );
   $rq = $pdo->prepare ( $sql );
   $rq->execute ();
 }

1 个答案:

答案 0 :(得分:1)

我的建议是在NAME列上使用UNIQUE约束并执行以下查询

  

INSERT INTO usersIDNAMECREATIONDATE)值(1,name1,   1-2-3),(2,name2,1-2-3),(3,name3,1-2-3)

此查询将是原子的。这意味着,如果存在违反完整性约束的情况,则不会插入任何行