我创建了一个名为 oilcompany 的列,其中包含 SET 数据(Hunt、Pioneer、Chevron、BP)
我可以将其中任何一个输入到石油公司列中,然后从一个石油公司更改为另一个石油公司,但我不知道如何从一个石油公司更改为多个石油公司(例如 Hunt 和 BP)...有什么建议吗?
最佳答案
在 MySQL documentation没有 UPDATE 语句的示例,但我通常使用两种方法来更新此类列:
- 使用文本值
- 使用数值
创建测试环境
mysql> CREATE TABLE tmp_table(
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> oilcompany SET('Hunt', 'Pioneer', 'Chevron', 'BP')
-> );
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO tmp_table(oilcompany) VALUES ('Hunt'), ('Pioneer');
Query OK, 2 rows affected (0.11 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM tmp_table;
+----+------------+
| id | oilcompany |
+----+------------+
| 1 | Hunt |
| 2 | Pioneer |
+----+------------+
2 rows in set (0.00 sec)
替代方案#1:使用文本值
由于 SET 是 ENUM 元素的集合,并且任何 ENUM 元素都可以被视为字符串,那么我们可以执行以下操作:
mysql> UPDATE tmp_table
-> SET oilcompany = 'Hunt,BP'
-> WHERE id = 1;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM tmp_table;
+----+------------+
| id | oilcompany |
+----+------------+
| 1 | Hunt,BP |
| 2 | Pioneer |
+----+------------+
2 rows in set (0.00 sec)
替代方案#2:使用数值
任何 SET 元素在内部存储为 64 位数字,其中包含表示每个 SET 元素的位组合。
在我们的表中:'Hunt'=1、'Pioneer'=2、'Chevron'=4、'BP'=8
。
此外,mysql 允许使用这些数字而不是文本值。如果我们需要在选择中查看数值,我们需要在数值表达式中使用 SET 列(例如添加零)。 让我们看看当前的值:
mysql> SELECT id, oilcompany+0, oilcompany FROM tmp_table;
+----+--------------+------------+
| id | oilcompany+0 | oilcompany |
+----+--------------+------------+
| 1 | 9 | Hunt,BP |
| 2 | 2 | Pioneer |
+----+--------------+------------+
2 rows in set (0.00 sec)
此处 9 = 'Hunt' (1) + 'BP' (8)
和 2 = 'Pioneer' (2)
。
现在,让我们将 Pioneer
更改为 'Hunt' (1) + 'Chevron' (4)
:
mysql> UPDATE tmp_table
-> SET oilcompany = 5
-> WHERE id = 2;
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT id, oilcompany+0, oilcompany FROM tmp_table;
+----+--------------+--------------+
| id | oilcompany+0 | oilcompany |
+----+--------------+--------------+
| 1 | 9 | Hunt,BP |
| 2 | 5 | Hunt,Chevron |
+----+--------------+--------------+
2 rows in set (0.00 sec)
关于mysql - 使用什么语法来更新 mysql 中的 SET 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49967588/