MySQL中如何向包含虚拟JSON生成列的表插入数据?
MySQL中如何向包含虚拟JSON生成列的表插入数据?
嗨,我来帮你搞定这个问题~其实你遇到的问题核心是没搞懂MySQL虚拟生成列的工作逻辑,咱们一步步说:
首先得明确:虚拟生成列(VIRTUAL)是MySQL自动帮你计算的,你完全不需要手动给它传值,也不能手动赋值。它的值是从你定义的表达式(这里就是JsonData->>'$.id')动态生成的,插入数据时MySQL会自动从你传入的JsonData里提取对应的值填充进去。
你之前的错误原因:
- 第一个错误(列数不匹配):你写的INSERT语句里列列表包含了
id,但值只传了JsonData一个,自然会报列数不匹配; - 第二个错误(不允许给生成列赋值):你手动给
id传了具体数值,但虚拟生成列的规则就是禁止手动赋值的,MySQL必须自己计算这个值,所以这个操作被拦截了。
正确的插入方式:
只需要插入JsonData列就行,id会自动生成:
INSERT INTO `table_json`(`JsonData`) VALUES (JSON_OBJECT('id', 87, 'name', 'carrot'));
插入完成后,你可以用查询语句验证:
SELECT * FROM `table_json`;
这时候你会看到id列已经自动填充为87,和你JsonData里的id值完全一致。
额外小提示:
哪怕你的生成列是STORED类型(会把计算后的值存在磁盘上),插入逻辑也是一样的——不需要手动给生成列传值,MySQL会自动完成计算和存储,区别只是VIRTUAL是查询时实时计算,STORED是插入/更新时计算好存起来。
内容来源于stack exchange
相关产品推荐
相关产品推荐

