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

guicsvcw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(271)

我想做的是:
在现有表中:“users”。
如果条目尚不存在,请插入一个新条目。
到目前为止,我在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'
)

这段代码有效;我有没有重复的新条目。
问题是:
为了更干净和节省请求的数量,我只想构建一个请求以避免执行 X INSERT INTO 在php循环中。
例如:

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 ();
 }
yptwkmov

yptwkmov1#

我的建议是对列名使用unique约束并执行以下查询
插入 users ( ID , NAME , CREATIONDATE )值(1,名称1,1-2-3),(2,名称2,1-2-3),(3,名称3,1-2-3)
此查询将是原子查询。这意味着,如果存在违反完整性约束的情况,则不会插入任何行

相关问题