我想做什么:
- 在现有表中:"用户"。
- 插入一个新条目(如果该条目尚不存在(。
到目前为止,我在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
。
例如:
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 ();
}
我的建议是对 NAME 列使用 UNIQUE 约束并执行以下查询
插入
users
(ID
,NAME
,CREATIONDATE
( 值 ( 1, 名称 1, 1-2-3(, (2, 名称 2, 1-2-3(, (3, 名称 3, 1-2-3(
此查询将是原子查询。这意味着,如果违反了完整性约束,则不会插入任何行