MySQL 如何在一个字段中包含多个值(mysql 一个字段包含)
MySQL: 如何在一个字段中包含多个值?
在 MySQL 中,有时需要在一个字段中存储多个值。比如说,我们要保存一篇文章的标签。一篇文章可能有多个标签,如 “技术”,”编程”,”Web开发” 等等。我们需要将这些标签以某种方式保存在数据库中,并可以方便地查询。
通常情况下,使用逗号分隔符或 JSON 格式来存储多个值是最常见的方法。下面分别简要介绍如何在 MySQL 中使用这两种方式。
使用逗号分隔符存储多个值
假设我们有一个名为 “articles” 的表,它包含了一篇文章的标识、标题和标签。我们可以使用逗号分隔符将多个标签合并成一个字符串来存储,然后再在查询时使用 LIKE 来进行匹配。
表结构如下:
CREATE TABLE articles (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
tags varchar(255) NOT NULL,
PRIMARY KEY (id)
);
对于这个表,我们可以像下面这样插入数据:
INSERT INTO articles (title, tags) VALUES (‘文章1’, ‘技术,编程’);
INSERT INTO articles (title, tags) VALUES (‘文章2’, ‘技术,Web开发’);
INSERT INTO articles (title, tags) VALUES (‘文章3’, ‘编程,Web开发’);
现在我们需要查询所有包含 “编程” 标签的文章:
SELECT * FROM articles WHERE tags LIKE ‘%编程%’;
这个查询将返回文章1和文章3。
使用 JSON 格式存储多个值
在 MySQL 5.7 及以上版本中,我们可以使用 JSON 类型来存储和查询复杂的数据。假设我们有一个名为 “articles” 的表,它包含了一篇文章的标识、标题和标签。我们可以将标签以 JSON 数组的形式存储在一个字段中。
表结构如下:
CREATE TABLE articles (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
tags JSON NOT NULL,
PRIMARY KEY (id)
);
对于这个表,我们可以像下面这样插入数据:
INSERT INTO articles (title, tags) VALUES (‘文章1’, ‘[“技术”, “编程”]’);
INSERT INTO articles (title, tags) VALUES (‘文章2’, ‘[“技术”, “Web开发”]’);
INSERT INTO articles (title, tags) VALUES (‘文章3’, ‘[“编程”, “Web开发”]’);
现在我们需要查询所有包含 “编程” 标签的文章:
SELECT * FROM articles WHERE JSON_CONTNS(tags, ‘”编程”‘);
这个查询将返回文章1和文章3。
总结
无论使用逗号分隔符还是 JSON 格式来存储多个值,都有其优缺点。逗号分隔符的缺点是难于查询和修改,而且无法提供类型安全性。JSON 格式的优点是可以轻松地过滤和查询,而且可以提供类型安全性和更好的扩展性。需要根据实际情况进行选择。如果使用的是 MySQL 5.7 及以上版本,建议使用 JSON 格式。