12

我对关系数据库的了解比较有限,但是有没有 SQL 命令可以用来创建每行包含一个集合的列?

我正在尝试创建一个包含 2 列的表。1 表示特定 ID,2 表示对应于这些 ID 的集合。

我读到了

http://dev.mysql.com/doc/refman/5.1/en/set.html

但是,集合数据类型要求您知道集合中可能包含哪些项目。但是,我只希望有一个不重复的可变编号项目列表。

4

4 回答 4

16

将项目列表创建为第二个表中的多行会好得多。然后,您可以在列表中包含任意数量的项目,您可以对它们进行排序、搜索特定项目、确保它们是唯一的,等等。

另请参阅我对在数据库列中存储分隔列表真的那么糟糕吗?

于 2013-06-11T21:28:02.657 回答
3

不,任意集合没有 MySQL 数据类型。您可以使用包含逗号分隔列表的字符串;有类似的函数FIND_IN_SET()将对这些值进行操作。

但这是糟糕的数据库设计。如果您有一个开放式列表,则应将其存储在一个表中,每个值一行。这将允许它们被索引,从而加快搜索速度。

于 2013-06-11T21:28:15.813 回答
0

MySQL 不支持数组、列表或其他类似的数据结构。但是它确实支持字符串,所以使用它和FIND_IN_SET()函数: http ://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

于 2013-06-11T21:28:23.740 回答
0

“SET”数据类型在这里不是一个好的选择。
您可以使用“VARCHAR”并将值存储为 CSV 格式。您在应用程序级别处理它们。
示例: INSERT into my_table(id, myset) values(1, "3,4,7");

于 2013-06-11T21:32:21.887 回答