Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更新MySQL集合类型的成员?_Mysql_Database_Database Design - Fatal编程技术网

如何更新MySQL集合类型的成员?

如何更新MySQL集合类型的成员?,mysql,database,database-design,Mysql,Database,Database Design,我有一个值表,其中一列的类型为 如果它当前有成员('a'、'b'、'c'、'd'),我如何将'e'添加到可能的值中 我意识到使用集合类型有点奇怪,我不清楚为什么会使用集合类型而不是具有集合值的另一个表的外键,但我没有设计有问题的数据库,也不能对其进行太多更改 谢谢你的帮助 更新:如果有帮助,我想更新所有行的集合类型,而不仅仅是一行。要向现有集合添加元素,请使用CONCAT()函数将新元素添加到逗号分隔的列表中。要处理十进制值,可以使用按位OR运算符| UPDATE set_test SET

我有一个值表,其中一列的类型为

如果它当前有成员('a'、'b'、'c'、'd'),我如何将'e'添加到可能的值中

我意识到使用集合类型有点奇怪,我不清楚为什么会使用集合类型而不是具有集合值的另一个表的外键,但我没有设计有问题的数据库,也不能对其进行太多更改

谢谢你的帮助


更新:如果有帮助,我想更新所有行的集合类型,而不仅仅是一行。

要向现有集合添加元素,请使用CONCAT()函数将新元素添加到逗号分隔的列表中。要处理十进制值,可以使用按位OR运算符|

  UPDATE set_test SET myset = CONCAT(myset,",Travel")
      WHERE rowid = 3;

您还可以使用CONCAT_WS()函数,该函数为我们处理列表分隔符:

  UPDATE set_test SET myset = CONCAT_WS(',',myset,'Dancing')
      WHERE rowid = 6;

是否要将“e”添加到该集合字段中的允许值,或者它已经存在,并且要将“e”添加到该表中集合字段的当前值

如果它还不是一个允许的值,则必须执行ALTER TABLE并重新定义字段:

 ALTER TABLE set_test CHANGE myset myset SET('a','b','c','d','e');
(是的,'myset'被放在那里两次,这是一种“currentname newname”之类的东西。)


否则,只需更新表格,并按照前面的回答在字段中添加“e”。

但这是针对一行的,删除WHERE子句是否会将“Travel”添加到新行的可能性列表中?是的,这是针对一行的。尝试不使用where子句,看看会发生什么。我猜它会将它添加到所有行中。我将使用concat()方法,但不使用where子句。如果“set”值为NULL,则第一个和第二个示例不起作用。第一个示例在空值上显示警告结果(可能不适用于某些配置)。所以我更喜欢更新的最后一个例子
 ALTER TABLE set_test CHANGE myset myset SET('a','b','c','d','e');