当前位置: 首页 > 面试题库 >

如何使用SQL-INSERT'N N重复键更新?

梁研
2023-03-14
问题内容

我有一个脚本,可捕获推文并将其放入数据库中。我将在cronjob上运行脚本,然后从数据库中在我的网站上显示推文,以防止达到twitter API的限制。

所以我不想在我的数据库中有重复的tweet,我知道我可以使用’INSERT … ON DUPLICATE KEY
UPDATE’来实现,但是我不太了解如何使用它。

我的数据库结构如下。

表格-哈希ID(auto_increment)鸣叫用户user_url

目前我要插入的SQL如下:

$tweet = $clean_content[0];
$user_url = $clean_uri[0];
$user = $clean_name[0];

$query='INSERT INTO hash (tweet, user, user_url) VALUES ("'.$tweet.'", "'.$user.'", "'.$user_url.'")';
mysql_query($query);

我如何正确地使用“ INSERT … ON DUPLICATE KEY UPDATE”仅在不存在时插入,而在不存在时进行更新?

谢谢


问题答案:

您需要在表上有一些UNIQUE KEY,如果user_url是tweer_url,则此大小应该合适(每条tweet都有唯一的url,id会更好)。

CREATE TABLE `hash` (
  `user_url` ...,
  ...,
  UNIQUE KEY `user_url` (`user_url`)
);

最好在您的情况下使用INSERT IGNORE

$query='INSERT IGNORE INTO hash (tweet, user, user_url) VALUES ("'.$tweet.'", "'.$user.'", "'.$user_url.'")';

当您需要更新现有行但只想插入一次时,ON DUPLICATE KEY很有用



 类似资料:
  • 我有一个静态结构的对象: 我想按键更新它的属性。例如,如果我收到 然后我想更新对象,并有: 我该怎么办?我试图创建一个新对象,类似这样: 我不知道如何从变量中设置键和值的名称

  • 我希望用同一行中其他列的相关值更新列。我正在更新的列是唯一的,如果执行此操作,我有时会出现重复的键错误。我希望忽略这些错误,只更新其中一条记录,忽略其他记录。 我的查询如下所示: 现在,在Fname和Lname两行匹配的情况下,我只希望更新第一个记录Coolname。 谢谢(MS SQL Server)

  • 问题内容: 我们有一个数据库,每天cronjob在午夜更新,我们从外部XML获取新数据。 我们要做的是插入所有新内容,并在键重复的情况下更新该字段。 我们想知道的是实际插入了哪些行,这意味着我们想要一个新项目的列表。是否有可能返回新插入的查询?基本上,我们将需要获取所有新的ID,而不是新插入的数量。 谢谢 问题答案: 添加一列并更改您的查询: 您也可以在触发器中增加它,使您可以保持查询不变。

  • 我真的很喜欢PyCharm的想法,也很乐意使用它。然而,它消耗计算机处理能力和延迟的倾向是一个很大的缺点。 在不久的将来,我将运行Python入门课程,并建议学生安装PyCharm,因为它似乎是目前最友好的IDE。 有没有一种方法可以加快PyCharm的速度,使其处理更加“轻松”?

  • 问题内容: 我有两个父表:和。 处理表: 访问表: 现在,我尝试创建一个子表: 一切正常,直到第3行。从第三行开始,即显示一条消息:。 问题答案: CONSTRAINT fk_column FOREIGN KEY (column1, column2, … column_n) REFERENCES parent_table (column1, column2, … column_n) 在你的情况下

  • 我目前使用JOOQ的可更新记录如下模式插入: 在,我希望使用数据库中的值更新,例如,如果表具有自动递增的列,将返回其值。 如果列具有唯一约束,则当违反该约束时,将抛出。我的问题是可以告诉JOOQ不要抛出异常,但仍然用现有的值更新记录吗?