最初に、あなたのクエリではどうなりますか?あなたが名前general
と値として空の文字列とStructure
1動的な列を持っている。この時点で
MariaDB [test]> CREATE TABLE Templates (ID INT, Structure BLOB);
Query OK, 0 rows affected (0.24 sec)
MariaDB [test]> INSERT INTO Templates VALUES (1, COLUMN_CREATE('general',''));
Query OK, 1 row affected (0.05 sec)
MariaDB [test]> SELECT COLUMN_JSON(Structure) FROM Templates;
+------------------------+
| COLUMN_JSON(Structure) |
+------------------------+
| {"general":""} |
+------------------------+
1 row in set (0.00 sec)
。
は、その後、あなたは次の操作を行います。
UPDATE `Templates`
SET `Structure` = COLUMN_ADD(
COLUMN_GET(`Structure`, 'general' as CHAR),
'Inner',
'value'
) ...
あなたCOLUMN_GET
が空の文字列で、COLUMN_ADD
のための最初の引数として使用しますgeneral
動的な列の値を取得します。空文字列にCOLUMN_ADD
を実行する場合は、クエリ内でこれを言うか、COLUMN_CREATE
を使用することができます。実際ににしたい場合は、BLOBの既存の値に何かを追加して、BLOBの名前を使用する必要があります。
ので、空の文字列にCOLUMN_ADD
作品 - 言い換えれば、それは持っていたすべてのものを捨てるStructure
ためのクリーンな新しい値を作成 - と名前Inner
と値value
で動的な列を追加します。どうやら
MariaDB [test]> SELECT COLUMN_JSON(Structure) FROM Templates;
+------------------------+
| COLUMN_JSON(Structure) |
+------------------------+
| {"Inner":"value"} |
+------------------------+
1 row in set (0.00 sec)
、何を代わりにやりたいことは、新しい動的な列にgeneral
列の値を設定することです:それはあなたがこれを得ている理由です。
あなたは、列y
が既にブロブx
に存在する場合COLUMN_ADD(x,y,z)
が値に置き換えられますので、そのためのgeneral
列をフェッチする必要はありません。しかし、新しい値general
の新しい動的列を作成する必要があります。
Structure
もないだけで、他の列が含まれgeneral
、そしてあなたがそれらを保持したいときに、何を行うべきこと
UPDATE `Templates`
SET `Structure` = COLUMN_ADD(
`Structure`,
'general',
COLUMN_CREATE('Inner','value')
) ...
これは、より一般的なケースを占めています。それはそうではないのです、とあなたはブロブはが含まれていることを確認したい場合のみgeneral
、あなたが行うことができます
UPDATE `Templates`
SET `Structure` = COLUMN_CREATE(
'general',
COLUMN_CREATE('Inner','value')
)