dbwritetable 删除 mysql 中的自动增量字段

Posted

技术标签:

【中文标题】dbwritetable 删除 mysql 中的自动增量字段【英文标题】:dbwritetable removes auto increment field in mysql 【发布时间】:2016-03-31 11:16:36 【问题描述】:

我是第一次使用 mysql。我在 mysql 中创建了一个数据库,其中包含一些使用 phpMYADMIN 的表。其中一张表的标题为“城市”。此表为两列字段 1. City_ID 和 2. City。在此 City_ID 是具有自动增量的主键。

我有 CSV 格式的数据,已读入 R。从数据框中,我使用以下命令从 R - DF 获取城市值。

City <- as.data.frame(unique(df[,10]))
names(City) <- "City"

我正在使用以下代码连接 MySql。

library(RMySQL)
mydb <- dbConnect(MySQL(), user = "root", password = "****", dbname = "pal", host = "localhost")

dbWriteTable(mydb, "City", City, overwrite = TRUE, row.names = FALSE)

这将删除字段 City_ID 并用值填充表的 City 列。不知道如何解决这个问题。我所做的大部分工作都有 excel 或 csv 格式的数据。而且我也需要经常更新表格。对此有任何想法。

【问题讨论】:

确实指定了overwrite = TRUE dbWriteTable(..., append = T) is overwritng in R的可能重复 @PanagiotisKanavos 我确实尝试使用 overwrite = FALSE 以及 append = T 但我的 sql 表中的值仅为零。 【参考方案1】:

我想,这也是本案的问题所在。 LAST_INSERT_ID() always returns 0 (RMySQL) - separate connection issue 正如 Illari 在不同主题中所写。

library("RMySQL")
con <- dbConnect(MySQL())
dbSendQuery(con, "DROP TABLE IF EXISTS t;")
dbSendQuery(con, "CREATE TABLE t (i INT NOT NULL AUTO_INCREMENT PRIMARY KEY);")
res <- dbSendQuery(con, "INSERT INTO t VALUES (NULL);")

doesn't work:
dbGetQuery(con, "SELECT LAST_INSERT_ID();")
  LAST_INSERT_ID()
1                0

# works:
dbClearResult(rs)
dbGetQuery(con, "SELECT LAST_INSERT_ID();")
  LAST_INSERT_ID()
1                1

【讨论】:

以上是关于dbwritetable 删除 mysql 中的自动增量字段的主要内容,如果未能解决你的问题,请参考以下文章

DBI 包中的 dbWriteTable 函数抛出错误

DBI dbWriteTable

RMySQL dbWriteTable 与 field.types

错误:protect():使用 dbWriteTable (RSQLite) 写入文件时保护堆栈溢出

DBI::dbWriteTable,无效的多字节字符串

mysql 中删除主键字段的自增属性和约束属性