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

zxlwwiss  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(413)

在r中,我有一个向量“myvector”,字符串,我想把它插入mysql表“mytable”的列“mycolumn”中。我知道我可以编写sql查询并使用dbsendquery在r中运行它。所以,让我们先找出sql查询。举个例子:

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

让我们在mytable的mycolumn列中插入myvector,行号从3到5,这里是sql查询,除了我不知道的最后一行之外,它还能工作:

  1. UPDATE myTable t JOIN
  2. (SELECT id
  3. FROM myTable tt
  4. LIMIT 3, 3
  5. ) tt
  6. ON tt.id = t.id
  7. SET myColumn = myVector;

谢谢

bvn4nwqk

bvn4nwqk1#

你应该做的是导出你的 R 矢量组件 JSON 使用 toJSON() 函数,例如:

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

也可以创建或更改 myTable 以便 myColumn 有适当的 JSON Data Type 如果值是有效的json值,则尝试将值插入json列会成功,如果不是,则会失败:
例子

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

此外,你还可以 R 矢量自 JSON 使用函数 fromJSON() .

dw1jzc5e

dw1jzc5e2#

我不知道,如果mysql支持 Vector 数据类型,但您可以将表设计为解决方法 Vector 可以存储在不同的表中并与 myTable 作为 1-M .
这有助于您轻松管理和检索详细信息。所以,假设 myTable 是您的table,它的现有设计是:

  1. myTable
  2. -------
  3. id
  4. col1
  5. vectorCol

所以,你的主桌可以

  1. CREATE TABLE myTable (
  2. id INT NOT NULL AUTO_INCREMENT,
  3. col1 varchar(50),
  4. PRIMARY KEY (id)
  5. );

以及存储向量的表。

  1. CREATE TABLE vectorTab (
  2. id INT NOT NULL AUTO_INCREMENT, -- in case ordering matter
  3. parent_id INT NOT NULL,
  4. value TEXT,
  5. PRIMARY KEY (id),
  6. FOREIGN KEY (parent_id) REFERENCES myTable (id) ON DELETE CASCADE ON UPDATE CASCADE
  7. );
展开查看全部
jm81lzqq

jm81lzqq3#

假设我正确理解你的问题,我有两个可能的解决方案:
1每个元素一列:如果你的向量都有相同数量的元素,你可以把它们存储在一个单独的列中。从上面的示例开始,表可以如下所示(列的大小以及是否允许空值取决于您的数据)

  1. CREATE TABLE `myTable` (
  2. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3. `element1` varchar(255) DEFAULT NULL,
  4. `element2` varchar(255) DEFAULT NULL,
  5. `element3` varchar(255) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

  1. INSERT INTO `myTable` (`id`, `element1`, `element2`, `element3`)
  2. 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/
可以使用以下语句创建表:

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

插入向量时,将变量绑定到查询。由于我不是一个rMaven,我将参考本文了解实现细节。

展开查看全部

相关问题