我想做什么:
到目前为止,我在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 ();
}
答案 0 :(得分:1)
我的建议是在NAME列上使用UNIQUE约束并执行以下查询
INSERT INTO
users
(ID
,NAME
,CREATIONDATE
)值(1,name1, 1-2-3),(2,name2,1-2-3),(3,name3,1-2-3)
此查询将是原子的。这意味着,如果存在违反完整性约束的情况,则不会插入任何行