Mysql SQL-仅使用一个请求插入多个条目而不重复
我想做的是:Mysql SQL-仅使用一个请求插入多个条目而不重复,mysql,insert,duplicates,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中尝试了以下内容:
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
例如:
我的建议是对列名使用唯一约束,并执行以下查询 将值(1、名称1、, 1-2-3),(2,名称2,1-2-3),(3,名称3,1-2-3)
此查询将是原子查询。这意味着,如果违反了完整性约束,则不会插入任何行为什么不使用Insert ignore into?嗨,Praveen,谢谢你的回答。事实上,您的解决方案是有效的,但新的问题是,正如您刚才所说,即使我的PHP尝试添加,例如,100行,如果100行中只有一行是新的,那么整个请求都会被拒绝……太接近了!哦,是的,我刚刚找到了解决方案,我只是把你的解决方案和Farhan Qasim的评论混合在一起,效果很好。(名称上的唯一索引+插入忽略)很高兴知道您找到了解决方案
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 ();
}