You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL 8.0中实现类似SQL Server OPENJSON的JSON插入?

在MySQL 8.0中实现类似SQL Server OPENJSON的JSON数据插入操作

MySQL 8.0提供了JSON_TABLE函数,完全可以替代SQL Server的OPENJSON实现将JSON数组转换为关系表并插入的需求,以下是对应你场景的实现代码:

完整插入示例(使用变量)

INSERT INTO myTable (ColA, ColB, ColC)
SELECT jDataA, jDataB, jDataC
FROM JSON_TABLE(
    @JSON,
    '$.data[*]' COLUMNS (
        jDataA VARCHAR(4) PATH '$.jDataA',
        jDataB INT PATH '$.jDataB',
        jDataC VARCHAR(48) PATH '$.jDataC'
    )
) AS jt;

直接使用JSON字符串的示例

如果不需要变量,直接传入JSON内容:

INSERT INTO myTable (ColA, ColB, ColC)
SELECT jDataA, jDataB, jDataC
FROM JSON_TABLE(
    '{
        "data": [{
                "jDataA": "AAAA",
                "jDataB": 1,
                "jDataC": "OK"
            }, {
                "jDataA": "BBBB",
                "jDataB": 2,
                "jDataC": "OK"
            }, {
                "jDataA": "CCCC",
                "jDataB": 3,
                "jDataC": "BAD"
            }, {
                "jDataA": "DDDD",
                "jDataB": 4,
                "jDataC": "BAD"
            }
        ]
    }',
    '$.data[*]' COLUMNS (
        jDataA VARCHAR(4) PATH '$.jDataA',
        jDataB INT PATH '$.jDataB',
        jDataC VARCHAR(48) PATH '$.jDataC'
    )
) AS jt;

关键参数说明

  • @JSON:对应你SQL Server中的JSON变量,存储要解析的JSON数据
  • '$.data[*]':指定要遍历的JSON数组路径,[*]表示匹配数组中的每一个元素
  • COLUMNS子句:和SQL Server的WITH子句功能一致,定义要提取的列名、数据类型以及对应的JSON字段路径
  • 如果JSON字段可能缺失,可以添加DEFAULT子句指定默认值,例如:jDataA VARCHAR(4) PATH '$.jDataA' DEFAULT 'N/A'

内容的提问来源于stack exchange,提问作者Desenfoque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:24:55