如何在mysql中将向量插入表的列中?

时间:2018-01-18 20:08:44

标签: mysql sql vector rmysql

在R中,我有一个向量," myVector",我要插入一列的字符串," myColumn",一个mysql表," myTable& #34 ;.我知道我可以编写sql查询并使用dbSendQuery在R中运行它。所以让我们先找出sql查询。这是一个例子:

myVector = c("hi","I", "am")

让我们在myTable的myColumn列中插入myVector,行号为3到5,这里的sql查询除了我不知道的最后一行之外有效:

UPDATE myTable t JOIN
       (SELECT id
        FROM myTable tt
        LIMIT 3, 3
       ) tt
       ON tt.id = t.id
    SET myColumn = myVector;

由于

3 个答案:

答案 0 :(得分:1)

我不知道,如果MySQL支持Vector数据类型,但您可以将表设计为解决方法,其中Vector可以存储在不同的表中,并且与{{1}有关系} {} myTable

这有助于您轻松管理和检索详细信息。因此,假设1-M是您的表格,并且它的现有设计是:

myTable

所以,你的主表可以是

myTable
-------
id
col1
vectorCol

和将存储您的矢量的表格。

CREATE TABLE myTable (
    id        INT NOT NULL AUTO_INCREMENT,
    col1  varchar(50),
    PRIMARY KEY (id)
);

答案 1 :(得分:1)

您应该使用toJSON()函数将R向量导出为JSON,例如:

myJSONVector = toJSON(c("hi","I", "am"))

同时创建或更改myTable,以便myColumn具有相应的JSON Data Type

  

如果值,尝试将值插入JSON列会成功   是一个有效的JSON值,但如果不是,则会失败:

示例

CREATE TABLE `myTable` (`myColumn` JSON);
INSERT INTO `myTable` VALUES(myJSONVector); // will fail if myJSONVector is not valid JSON
// update query would be
UPDATE `myTable` SET `myColumn` = myJSONVector
WHERE `id` IN (3,4,5);

另外   您可以使用函数fromJSON()R创建JSON向量。

答案 2 :(得分:1)

假设我理解你的问题,我脑子里有两种可能的解决方案:

<强> 1。每个元素一列: 如果您的向量都具有相同数量的元素,则可以将它们中的每一个存储在单独的列中。从上面的示例开始,表格看起来像这样。 (列的大小以及是否允许空值取决于您的数据)

CREATE TABLE `myTable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `element1` varchar(255) DEFAULT NULL,
  `element2` varchar(255) DEFAULT NULL,
  `element3` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

从上面插入向量的语句是:

INSERT INTO `myTable` (`id`, `element1`, `element2`, `element3`)
VALUES (1, 'hi', 'I', 'am');

根据你的载体有多少元素,这种方法可能或多或少适用。

<强> 2。将矢量存储为blob: 另一种方法可能是将矢量存储为blob。 Blob(二进制大对象)是一种存储可变数量(二进制)数据的数据类型(请参阅:https://dev.mysql.com/doc/refman/5.7/en/blob.html)。这个想法取自本文:http://jfaganuk.github.io/2015/01/12/storing-r-objects-in-sqlite-tables/

可以使用以下语句创建表:

CREATE TABLE `myTable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `myVector` blob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

插入矢量时,将变量绑定到查询中。由于我不是R专家,因此我会参考本文的实施细节。