当前位置:   article > 正文

Mysql数据类型---SET_mysql set类型

mysql set类型

标签(空格分隔): MYSQL


SET 类型与 ENUM 类型相似。使用她指定一个 permitted values 列表。但是 SET 类型的字段可以写入列表范围内的多个值。通常,我们在一个字段存储一个值,例如,一个会员拥有一个name,一个town。SET 类型让我们可以在一个字段存储多个值。例如我们可以在一个字段存储会员的多个电话号码。

但是 SET 类型的permitted values数目不能太多,最多只能包含64个值。

创建 teams_new 表,包含teamno,playerno,division字段,其中division字段为 SET 类型

CREATE TABLE teams_new(
    teamno          INTEGER NOT NULL PRIMARY KEY,
    playerno        INTEGER NOT NULL,
    division        SET ('first','second','third','fourth')
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

小结:
在 SET 关键字后面使用括号列出 permitted values。这些值必须是字符表达式,即使permitted values 是一个数字序列,也必须写成字符字面量形式。
permitted values 有时也被称作 elements。divsion 字段由4个 element 组成。

插入数据行

插入数据行时,SET 类型的字段的元素必须在一个字符字面量中并且通过逗号分隔。

mysql> INSERT INTO teams_new VALUES (1, 27, 'first');
Query OK, 1 row affected (0.80 sec)

mysql> INSERT INTO teams_new VALUES (2, 27, 'first,third');
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO teams_new VALUES (3, 27, 'first,third,sixth');
ERROR 1265 (01000): Data truncated for column 'division' at row 1
mysql> INSERT INTO teams_new VALUES (4, 27, 'first,fifth');
ERROR 1265 (01000): Data truncated for column 'division' at row 1
mysql> INSERT INTO teams_new VALUES (5, 27, NULL);
Query OK, 1 row affected (0.07 sec)

mysql> INSERT INTO teams_new VALUES (6, 27, 7);
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO teams_new VALUES (7, 27, CONV(1001,2,10));
Query OK, 1 row affected (0.07 sec)

mysql> SELECT * FROM teams_new;
+--------+----------+--------------------+
| teamno | playerno | division           |
+--------+----------+--------------------+
|      1 |       27 | first              |
|      2 |       27 | first,third        |
|      5 |       27 | NULL               |
|      6 |       27 | first,second,third |
|      7 |       27 | first,fourth       |
+--------+----------+--------------------+
5 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

小结:第一行值添加了一个值 first,第二行添加了两个值,这两个值不是指定为两个字面量,而是一个字面量,即 ‘first,third’而不是‘first’,’third’.
第三行,第四行包含超出范围的值,报错。第五行输入 NULL 。第六行指定了三个值。

同 ENUM 类型一样,SET 类型字段并没有存储实际值,而是存储一个64个长度的二进制字符串。在这个字符串中,如果这个列的第一个值出现了,右数第1位是1,否则就是0。如果集合中第二个值出现了,右数第2位是1,否则就是0,以此类推。

显示 division字段内部类型

mysql> SELECT teamno teamno,division * 1,BIN(division * 1) FROM teams_new;
+--------+--------------+-------------------+
| teamno | division * 1 | BIN(division * 1) |
+--------+--------------+-------------------+
|      1 |            1 | 1                 |
|      2 |            5 | 101               |
|      5 |         NULL | NULL              |
|      6 |            7 | 111               |
|      7 |            9 | 1001              |
+--------+--------------+-------------------+
5 rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

小结:
通过 divsion * 1 ,我们可以显示内部值。使用 BIN函数把 DECIMAL值转为二进制,并且可以看到MYSQL使用的位模式。注意,这个位模式可以相当长。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/752864
推荐阅读
相关标签
  

闽ICP备14008679号