我对关系数据库的了解更加有限,但是有没有可用于创建包含每行中的一组的列的SQL命令?在mySQL中设置数据类型
我想创建一个2列的表。 1代表特定ID,第2代代表与这些ID相对应的组。
我读到
http://dev.mysql.com/doc/refman/5.1/en/set.html
然而,一组数据类型,需要知道可能会在你设定哪些项目。但是,我只想要有一个不重复的项目的可变数量列表。
我对关系数据库的了解更加有限,但是有没有可用于创建包含每行中的一组的列的SQL命令?在mySQL中设置数据类型
我想创建一个2列的表。 1代表特定ID,第2代代表与这些ID相对应的组。
我读到
http://dev.mysql.com/doc/refman/5.1/en/set.html
然而,一组数据类型,需要知道可能会在你设定哪些项目。但是,我只想要有一个不重复的项目的可变数量列表。
在第二个表格中将这些项目列表创建为多行将会好得多。然后,你可以有你想要的,你可以对它们进行排序,搜索特定项目,确保他们独特的列表等许多项目
另见我的回答Is storing a delimited list in a database column really that bad?
这是否意味着我需要为每个列表创建一个单独的表格?因此,我需要每个列表中的不同名称? – Andy
是的。想想这个比喻:您还需要为应用程序代码中使用的每个值或数组使用不同的变量名称! :-) –
没有,有没有任何集合的MySQL数据类型。您可以使用包含逗号分隔列表的字符串;有像FIND_IN_SET()
这样的函数可以对这些值进行操作。
但这是糟糕的数据库设计。如果你有一个开放式的列表,你应该把它存储在一个表中,每个值有一行。这将允许他们被索引,使搜索更快。
MySQL不支持数组,列表或其他数据结构。然而,它支持字符串,所以使用和FIND_IN_SET()
功能: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set
“SET”数据类型将不是一个好的选择在这里。
您可以使用“VARCHAR”并以CSV格式存储值。你在应用程序级别处理它们。例如:插入my_table(id,myset)值(1,“3,4,7”);
我永远不会建议有人在数据库列中存储分隔列表。请参阅上面的@BillKarwin的回复。并看到他的另一篇文章:http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad/3653574#3653574 – ajon
你不希望这样,查看[数据库规范化](http://en.wikipedia.org/wiki/Database_normalization),你可能想要一个带有'(id,value)'的第二个表,其中第二个(第3,第4,...)值将是一个_new_行,并且具有相同的“id”,并且是新的/其他的“值”。 – Wrikken