2017-12-02 152 views
0

在MariaDB的文檔,它說,JSON_SET插入或更新信息,而只是JSON_INSERT插入和JSON_REPLACE唯一替代品。JSON_SET在MariaDB的,不插入數據

我使用下面的代碼,我需要插入的信息,如果它不存在,或者更新的,如果它已經存在。

的問題是,它僅更新,當它已經存在,並且它不會插入,如果它不存在。

MariaDB docs

UPDATE myTable SET config = JSON_SET(config, '$.person.name', 'zeca', '$.person.details.age', '87') WHERE id = 127 

如果 「詳細信息」,在爲myTable的 「配置」 領域已經存在, 「時代」 將被註冊。如果「詳細信息」仍然是不存在的,我要註冊details.age,但它沒有註冊。

+0

你得到它的工作? – musashii

回答

0

我不能測試我的代碼,但也許你能得到它的東西像這樣工作

UPDATE myTable SET config = JSON_MERGE(config, '{"person": {}'), config = JSON_SET(config, '$.person.name', 'zeca', '$.person.details.age', '87') WHERE id = 127

0

調整了一句,因爲你需要:

UPDATE `myTable` 
    SET `config` = JSON_SET(`config`, '$.person.name', 'zeca'), 
     `config` = IF(JSON_EXISTS(`config`, '$.person.details') IS NOT NULL, 
     JSON_SET(
      `config`, 
      '$.person.details', 
      JSON_OBJECT('age', 87) 
     ), 
     JSON_INSERT(
      `config`, 
      '$.person', 
      JSON_OBJECT('details', 
      JSON_OBJECT('age', 87) 
     ) 
     ) 
    ) 
WHERE `id` = 127; 

dbfiddle