簡體   English   中英

MySQL 到 MariaDB - 動態列?

[英]MySQL to MariaDB - Dynamic Columns?

我正在嘗試將數據從old_table傳輸到table ,其中一些數據位於動態列中以供將來導入

INSERT INTO `table` (`col_1`,`col_2`,etc....   `attributes`)
SELECT `col_1`,`col_2`,etc....     COLUMN_CREATE('name',`col_99` AS UNSIGNED,'name2',`col_100` AS CHAR)
FROM `old_table`

關於動態表的唯一文檔基本上是

COLUMN_CREATE('name',1 AS UNSIGNED) 

這不是一個非常“動態”的例子......

對其他解決方案開放但不是 JSON,但更喜歡 MariaDB,因為它本質上是我習慣的 MySQL

編輯:非常感謝您的回答,但有關更多信息,我正在嘗試使用此處記錄(嚴重)的這種方法: https : //mariadb.com/kb/en/dynamic-columns-functions/

編輯 2:我想知道 EAV 是否​​可能是唯一的解決方案,因為我似乎遇到了 MariaDB 動態列的問題,我在任何地方都找不到更多文檔或指南!

編輯 3:這些動態列仍然沒有運氣? MariaDB 真的很混亂!

這是你想要的嗎?

INSERT INTO `table` (`col_1`, `col_2`, . . . col_99, col_100)
    SELECT `col_1`, `col_2`, . . ., 'name' as col_99, 
           CAST(NULL as char) as col_100  
    FROM `old_table`;

只需列出帶有別名的列; 對新列使用常量。

對於動態列、JSON 或 EAV,您可以省略 NULL“列”。 您只需包含非空的項目。

我建議你放棄動態列; 它們只存在於那個地方。 與此同時,JSON 正變得越來越被接受。 即使您使用的是“舊”版本的 MariaDB 或 MySQL,您也可以將 JSON 文本放在TEXT列中。

請記住,沒有一種類似 eav 的技術是非常干凈的。

更多關於問題空間: http : //mysql.rjweb.org/doc.php/eav

至於“更可搜索”——您可能需要做出妥協:

  • 常用搜索字段:使用INDEXes生成列。
  • 考慮帶有一些文本數據的FULLTEXT索引。 只需將其全部放入一個文本列中即可進行高效搜索。
  • 如果您需要搜索太多不同的字段; 使用您的應用程序代碼解碼 JSON 以完成搜索(在您過濾了 SQL 中的內容之后)。
  • 也就是說,不要期望在 SQL 中做所有事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM