gpt4 book ai didi

mysql - 仅当记录不存在时才插入查询

转载 作者:可可西里 更新时间:2023-11-01 07:46:44 26 4
gpt4 key购买 nike

在我的表中有两个字段:v_idip_address。仅当 IP 地址尚不存在时,我才想向该表中插入一些数据。

在 Google 之后,我遇到了 INSERT IGNORE INTO 语句,这是我的代码:

public function update_visits($ip_address)
{
$sql = 'INSERT IGNORE INTO `24h_visits` (ip_address) VALUES (?)';
if($this->db->query($sql, array($ip_address)))
{
return TRUE;
}
return FALSE;
}

它运行良好并且没有错误,但仍然会生成重复的行,即使将相同的 IP 作为参数传入也是如此。

有人知道吗?谢谢。

最佳答案

您必须在 ip_address 上创建一个 UNIQUE 索引,INSERT IGNORE 才能工作:

ALTER TABLE 24h_visits
ADD UNIQUE INDEX(ip_address)

但是,我还没有看到您的架构的全部内容,但我假设有一列存储上次访问的时间戳。这是唯一有意义的方法(因此您可以不时清除超过 24 小时的访问)。

在这种情况下,您实际上不需要INSERT IGNORE,而是INSERT ... ON DUPLICATE KEY UPDATE反而。假设您有一个名为 last_visit 的列:

INSERT INTO 24h_visits (ip_address, last_visit)
VALUES ('$ip_address', NOW())
ON DUPLICATE KEY UPDATE last_visit = NOW();

使用 INSERT IGNORE,永远不会插入新行,因此您总是会在 last_visit 上插入第一个值,这(我的看法)不完全正确。

关于mysql - 仅当记录不存在时才插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com