1

我在 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 Package)编写此代码

  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 表中消失。

我不确定为什么会这样。我还没有下达命令来删除我请求某人查看并指导我的列。

4

1 回答 1

2

当您打电话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)

现在您可以追加到已经存在的表中。尽管如此,您还没有为and列指定非NULL值。所以这个选项要求它可以为空。如果是自动增量,那么我希望 MySQL 能够使用此选项自动分配一个 id。IDCreateDateCreateDateID

于 2018-03-14T09:08:37.077 回答