我在MySQL中有下表,其中包含以下列
tbl= ID(Integer(11)) Keyword(Varchar(55)) Estimate(DECIMAL(10,4))
Error(DECIMAL(10,4)) CreateDate(DateTime)
在这些变量中,ID和CreateDate是系统生成的,即从R写入表时我不需要生成相同的内容
我正在将以下数据帧写入此表
DF<- Keyword Estimate Error
a 23 2
b 21 6
c 20 5
我使用以下代码使用DBWriteTable命令(R SQ lite包)编写此代码
dbWriteTable(conn, value = DF, name='tbl', overwrite=T, append=F,
field.type=list(Keyword='varchar(100)', Estimated='DECIMAL(10,4)',
Error='Decimal(10,4)'),row.names=FALSE)
现在这导致两个列,即ID和Date列在最终的mysql表中消失。
我不确定为什么会这样。我没有下一个命令来删除列我要求别人看一看并引导我。
当你用dbWriteTable
调用overwrite=TRUE
时,你告诉MySQL删除表并重新创建一个新表。在您的情况下,它使用它知道的仅有的三个列创建一个新表,即您传递给它的内容。一种选择是将其他两列添加到数据框中:
DF$ID <- NA
DF$CreateDate <- NA
然后,拨打当前电话。我希望NA
值将映射到MySQL中的NULL
,这与执行INSERT
并且不指定这些列的值的行为一致。这里存在一个潜在的问题,因为MySQL可能不知道ID
是一个自动增量列。所以我不太喜欢这个解决方案。
替代方案,并根据您的想法,将进行以下调用:
dbWriteTable(conn, value = DF, name='tbl', overwrite=FALSE, append=TRUE,
field.type=list(Keyword='varchar(100)', Estimated='DECIMAL(10,4)',
Error='Decimal(10,4)'),row.names=FALSE)
现在您可以添加到现有表中。但是,您还没有为NULL
和ID
列指定非CreateDate
值。所以这个选项要求CreateDate
可以为空。如果ID
是自动递增,那么我希望MySQL能够使用此选项自动分配id。