【问题标题】:Add column into existing mysql table using RMySQL使用 RMySQL 将列添加到现有的 mysql 表中
【发布时间】:2016-10-01 06:39:33
【问题描述】:

我希望能够将一列添加到现有table 及其相应类型。

我是这样尝试的:

library("RMySQL")


# Connect to DB
v_db <- dbConnect(MySQL(),
              user="USERNAME", password="PASSWORD",
              dbname="DBNAME", host="localhost")
on.exit(dbDisconnect(v_db))

#Read in my new data (into R)
newcolumn <- read.csv("test.csv")
newcolumn
id   datafornewcolumn
1    4
2    5 
3    8

dbq <- dbSendQuery(v_db, "SELECT * FROM `EXISTINGTABLE`")
dbq <- fetch(dbq, n = -1)
dbq
id  existing columns
1   ...
2   ...
3   ...

dbWriteTable(v_db, "EXISTINGTABLE", merge(dbq, newcolumn, by="id", all.x=TRUE), row.name=FALSE, overwrite=T) 

但是在最后一条语句中,我用新表覆盖了现有表,从而丢失了所有相应的变量类型。

然后我尝试了一种解决方法。将新数据写入 SQL 中的新 table,然后将其合并到 EXISTINGTABLE。但是,我似乎无法正确地做到这一点:

dbSendQuery(v_db, "create table workaround (id int not null primary key, 
        newcolumn DECIMAL(3,1))")

#write data into that new empty table called workaround --> works fine
dbWriteTable(v_db, "workaround", neu, row.name=FALSE, append=TRUE)

#something works...
dbSendQuery(v_db, "SELECT * FROM EXISTINGTABLE
     LEFT JOIN workaround ON EXISTINGTABLE.id = workaround.id
     UNION
     SELECT * FROM EXISTINGTABLE
     RIGHT JOIN workaround ON EXISTINGTABLE.id = workaround.id")
<MySQLResult:(29344,26,2)> 

结果应该是这样的:

 EXISTINGTABLE
 id  existingcolumns datafornewcolumn
 1   ...             4 
 2   ...             5
 3   ...             8

【问题讨论】:

    标签: mysql r rmysql


    【解决方案1】:

    您是否尝试过使用带有 ALTER TABLE 语句的 SQL 修改您的表?

    rs <- dbSendStatement(v_db, "ALTER TABLE table_name ADD COLUMN [...]")
    dbHasCompleted(rs)
    dbGetRowsAffected(rs)
    dbClearResult(rs)
    

    然后您可以简单地发送和 UPDATE 语句来添加新值。

    首先尝试dbExecute() 方法...然后在 R 控制台上尝试:

    ?dbExecute?dbSendStatement

    也检查一下:RMySQL dbWriteTable with field.types

    【讨论】:

      【解决方案2】:

      向现有表中添加列可以这样完成:

      library(dbConnect) # *loads the packages Loading required package: RMySQL
                                              Loading required package: DBI
                                              Loading required package: methods
                                              Loading required package: gWidgets*
      
      
      mydb =dbConnect(MySQL(),user='root',password='newpass',dbname='database_name', host='localhost')
      
      my_table <- dbReadTable(conn=mydb,name='table_name') 
      my_table$column_name<- NA # *creates new column named column_name and populates its value NA*
      head(my_table) # *shows the data* 
      

      【讨论】:

      • 看来我的问题模棱两可。对此感到抱歉。我确实知道如何在 R 中做到这一点。但是,我想知道如何在 R 中的 MySQL 中做到这一点......
      猜你喜欢
      • 1970-01-01
      • 2013-11-29
      • 2012-01-22
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2016-11-13
      • 2014-02-20
      相关资源
      最近更新 更多