2017-12-02 147 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