【发布时间】:2019-05-14 14:36:10
【问题描述】:
我创建一个 MySQL 表如下:
create table schema_name.test (
col1 varchar(10),
col2 varchar(10),
primary key (col1),
index col1_index (col1)
)
然后我使用dbWriteTable 将data.frame 写入表格,如下所示:
> test <- data.frame(col1 = c("a","b"),col2 = c("apple","banana"))
> types <- c("varchar(10)","varchar(10)")
> names(types) <- names(test)
> dbWriteTable(conn = con, overwrite = TRUE, value = test, name = "test",field.types = types)
执行此操作并在 MySQL 环境中检查表后,我看到主键和索引已被删除(con 这里是使用dbConnect( odbc::odbc(),"my_dsn_name") 创建的连接对象)。这是不希望的。
我试图实现的行为是覆盖表中的数据,同时保持表的元数据/结构不变。
我知道我可以创建另一个具有相同结构的表,使用dbWriteTable 将数据写入该表,然后使用插入语句将数据从另一个表复制到目标表中,但这相当有点开销,感觉应该是不必要的。顺序执行所有数据的删除和追加同样有问题。
对于这个问题有更优雅的解决方案吗?键和索引的破坏是预期的行为吗?文档非常稀少,似乎没有提供解决此问题的方法。
【问题讨论】:
标签: mysql r odbc primary-key table-index