如何跳过 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 列数据分配 NULL
或 0
的值。然后 MySQL 会自动为它生成值。
【讨论】:
首先,感谢您的快速回复。我惊讶地发现答案是如此简单。无论如何,我添加了另一个值为 0 的列,现在我收到以下错误:dimnames(x) 【参考方案2】:使用sqlUpdate
以便根据匹配的主键更新行。如果您真的想追加,则需要在写入数据库之前为新行创建唯一 ID。这在 R 中非常简单,但您需要确保它们与数据库中已有的内容以及 R 中的新数据相比是唯一的。
【讨论】:
我认为提问者不想更新表中的现有行。相反,他想追加新行。此外,我在尝试为其 PK 预计会自动生成的表插入我自己的 id 时遇到了问题。肯定有更好的方法吗? 4 年后这条评论给我留下了深刻的印象!我不知道这是什么了。 @Ben :你说得对,我认为 R 没有提供使用 sqlSave 插入自动递增标识列的功能。以上是关于如何跳过 sqlSave() 命令中的主键?的主要内容,如果未能解决你的问题,请参考以下文章