MySQL文档存储是MySQL 5.7及以上版本引入的功能,它允许用户以JSON格式存储和查询数据,提供了NoSQL风格的文档数据库能力,同时保留了传统关系型数据库的优势。
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
details JSON,
price DECIMAL(10,2)
);
INSERT INTO products (name, details, price)
VALUES ('Laptop', '{"brand": "Dell", "specs": {"cpu": "i7", "ram": "16GB"}}', 999.99);
-- 提取JSON字段
SELECT name, details->'$.brand' AS brand FROM products;
-- 条件查询
SELECT name FROM products WHERE details->'$.specs.ram' = '16GB';
// 使用MySQL Shell
var myColl = db.createCollection('products');
// 插入文档
myColl.add({
name: "Smartphone",
brand: "Apple",
specs: {
model: "iPhone 13",
storage: "128GB"
},
price: 899.00
}).execute();
// 查询文档
myColl.find("brand = 'Apple'").execute();
// 更新文档
myColl.modify("name = 'Smartphone'")
.set("price", 849.00)
.execute();
// 删除文档
myColl.remove("name = 'Smartphone'").execute();
-- 在JSON字段上创建虚拟列并索引
ALTER TABLE products ADD COLUMN brand VARCHAR(50)
GENERATED ALWAYS AS (details->'$.brand') VIRTUAL;
CREATE INDEX idx_brand ON products(brand);
-- 直接创建JSON路径索引(MySQL 8.0+)
CREATE INDEX idx_specs ON products((CAST(details->'$.specs.ram' AS CHAR(10))));
JSON_EXTRACT()
/ ->
:提取JSON值JSON_SET()
:设置JSON值JSON_REMOVE()
:删除JSON元素JSON_MERGE_PATCH()
:合并JSON文档JSON_SEARCH()
:搜索JSON文档JSON_VALID()
:验证JSON有效性通过掌握这些知识点,您可以充分利用MySQL文档存储功能,在传统关系型数据库基础上获得NoSQL的灵活性。