はじめに
こんばんは。
やっとリリースが出来て、落ち着いてきました。
今回も簡単ですが備忘録を書き書き。
MySQLのJSON型とかを時々使ってるんですが、JSONに向けて UPDATE や INSERT DELETE を実行したので、ログを残しておきます。
本題
こんなテーブルを作りました。
mysql> desc example_table; +---------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | options | json | NO | | NULL | | +---------+---------------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql > INSERT INTO example_table VALUES (1, JSON_OBJECT('aaa', 100, 'bbb', 200, 'ccc', 300)), (2, JSON_OBJECT('eee', 1000, 'fff', 2000, 'ggg', 3000)), (3, JSON_OBJECT('xxx', 10000, 'yyy', 20000, 'zzz', 30000)); mysql> SELECT * FROM example_table; +----+--------------------------------------------+ | id | options | +----+--------------------------------------------+ | 1 | {"aaa": 100, "bbb": 200, "ccc": 300} | | 2 | {"eee": 1000, "fff": 2000, "ggg": 3000} | | 3 | {"xxx": 10000, "yyy": 20000, "zzz": 30000} | +----+--------------------------------------------+ 3 rows in set (0.00 sec)
UPDATE
mysql> UPDATE example_table SET options = JSON_SET(options, "$.fff", 2222) WHERE id = 2; mysql> SELECT * FROM example_table; +----+--------------------------------------------+ | id | options | +----+--------------------------------------------+ | 1 | {"aaa": 100, "bbb": 200, "ccc": 300} | | 2 | {"eee": 1000, "fff": 2222, "ggg": 3000} | | 3 | {"xxx": 10000, "yyy": 20000, "zzz": 30000} | +----+--------------------------------------------+ 3 rows in set (0.00 sec)
対象のレコードの対象のjson keyがupdateされてます。
INSERT
mysql> UPDATE example_table SET options=JSON_MERGE(options, JSON_OBJECT('hhh', 4000)) WHERE id = 2; mysql> SELECT * FROM example_table; +----+------------------------------------------------------+ | id | options | +----+------------------------------------------------------+ | 1 | {"aaa": 100, "bbb": 200, "ccc": 300} | | 2 | {"eee": 1000, "fff": 2222, "ggg": 3000, "hhh": 4000} | | 3 | {"xxx": 10000, "yyy": 20000, "zzz": 30000} | +----+------------------------------------------------------+ 3 rows in set (0.00 sec)
対象のレコードの対象のjson dataに 指定したkeyが指定したvalueで追加されています!
DELETE
mysql> UPDATE example_table SET options = JSON_REMOVE(options, '$.fff') WHERE id = 2; mysql> SELECT * FROM example_table; +----+--------------------------------------------+ | id | options | +----+--------------------------------------------+ | 1 | {"aaa": 100, "bbb": 200, "ccc": 300} | | 2 | {"eee": 1000, "ggg": 3000, "hhh": 4000} | | 3 | {"xxx": 10000, "yyy": 20000, "zzz": 30000} | +----+--------------------------------------------+ 3 rows in set (0.01 sec)
対象のレコードの対象のjson dataに 指定したkeyが削除されています。
こんな感じで簡単にいきました!
ちなみに JSON型ではなく String型でJSONの形で保存されているデータでも問題なく動きます。
終わりに
アドベントカレンダーの季節になったので、僕も何個かチャレンジしてみたいなと思ってます!
では現場からは以上です。