【问题标题】:How to skip primary key in sqlSave() command?如何跳过 sqlSave() 命令中的主键?
【发布时间】:2023-04-01 07:45:02
【问题描述】:

我正在尝试使用 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() 来避免这种情况吗?

提前致谢。

【问题讨论】:

    标签: mysql r rodbc


    【解决方案1】:

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

    【讨论】:

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

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

    【讨论】:

    • 我认为提问者不想更新表中的现有行。相反,他想追加新行。此外,我在尝试为其 PK 预计会自动生成的表插入我自己的 id 时遇到了问题。肯定有更好的方法吗?
    • 4 年后这条评论给我留下了深刻的印象!我不知道这是什么了。
    • @Ben :你说得对,我认为 R 没有提供使用 sqlSave 插入自动递增标识列的功能。
    猜你喜欢
    • 2018-08-27
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2021-09-02
    • 2016-07-14
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多