如何跳过 sqlSave() 命令中的主键?

Posted

技术标签:

【中文标题】如何跳过 sqlSave() 命令中的主键?【英文标题】:How to skip primary key in sqlSave() command? 【发布时间】:2011-06-15 05:58:10 【问题描述】:

我正在尝试使用 RODBC 在 mysql 数据库中插入一个 data.frame。我使用的命令如下:

sqlSave(channel,dbData,tablename='table_name', append=TRUE,safer=TRUE,fast=FALSE,verbose=TRUE)

现在我尝试插入数据的表有一个自动递增的主键。我的表共有 7 列,包括主键。在我的数据框中,我有 6 列,因为我不想自己插入 PK。但是,当我运行命令时,出现以下错误:

23000 1062 [MySQL][ODBC 5.1 Driver][mysqld-5.5.13]Duplicate entry '1' for key 'PRIMARY'

从上面的错误中,我了解到当已经有一条记录为 1 作为其 PK 时,它试图插入“1”作为主键。知道如何使用 sqlSave() 来避免这种情况吗?

提前致谢。

【问题讨论】:

【参考方案1】:

您可以尝试在数据框中添加第七列,并为 PK 列数据分配 NULL0 的值。然后 MySQL 会自动为它生成值。

【讨论】:

首先,感谢您的快速回复。我惊讶地发现答案是如此简单。无论如何,我添加了另一个值为 0 的列,现在我收到以下错误:dimnames(x) 【参考方案2】:

使用sqlUpdate 以便根据匹配的主键更新行。如果您真的想追加,则需要在写入数据库之前为新行创建唯一 ID。这在 R 中非常简单,但您需要确保它们与数据库中已有的内容以及 R 中的新数据相比是唯一的。

【讨论】:

我认为提问者不想更新表中的现有行。相反,他想追加新行。此外,我在尝试为其 PK 预计会自动生成的表插入我自己的 id 时遇到了问题。肯定有更好的方法吗? 4 年后这条评论给我留下了深刻的印象!我不知道这是什么了。 @Ben :你说得对,我认为 R 没有提供使用 sqlSave 插入自动递增标识列的功能。

以上是关于如何跳过 sqlSave() 命令中的主键?的主要内容,如果未能解决你的问题,请参考以下文章

向存储过程添加 IF ...ELSE 语句以跳过重复的主键

如何更改主键自动增量,以便在删除行时不会跳过值[重复]

如何分清SQL数据库中的主键与外键

删除特定行后如何修改数据库 phpmyadmin 中的主键?

如何通过phoenix中查看表的主键信息

如何在 C# 中获取 DataGridView 中的主键?