### 13.2.14 VALUES 声明

[](<>)[](<>)[](<>)

[`价值观`](values.html)是 MySQL 8.0.19 中引入的 DML 语句，它返回一组一个或多个行作为表。换句话说，它是一个表值构造函数，也可以作为一个独立的 SQL 语句。

```
VALUES row_constructor_list [ORDER BY column_designator] [LIMIT number]

row_constructor_list:
    ROW(value_list)[, ROW(value_list)][, ...]

value_list:
    value[, value][, ...]

column_designator:
    column_index
```

这[`价值观`](values.html)声明包括`价值观`关键字后跟一个或多个行构造函数的列表，以逗号分隔。行构造函数由`排（）`行构造函数子句，括号中包含一个或多个标量值的值列表。值可以是任何 MySQL 数据类型的文字或解析为标量值的表达式。

`排（）`不能为空（但每个提供的标量值都可以`空值`）。每个`排（）`在相同的[`价值观`](values.html)语句在其值列表中必须具有相同数量的值。

这`默认`不支持关键字`价值观`并导致语法错误，除非它用于在[`插入`](insert.html)陈述。

的输出[`价值观`](values.html)是一个表：

```
mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8);
+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |       -2 |        3 |
|        5 |        7 |        9 |
|        4 |        6 |        8 |
+----------+----------+----------+
3 rows in set (0.00 sec)
```

表输出的列[`价值观`](values.html)有隐式命名的列`列_0`,`列_1`,`column_2`，以此类推，总是以`0`.这个事实可用于使用可选的按列对行进行排序`订购方式`子句与此子句与 a 一起使用的方式相同[`选择`](select.html)声明，如下所示：

```
mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER BY column_1;
+----------+----------+----------+
| column_0 | column_1 | column_2 |
+----------+----------+----------+
|        1 |       -2 |        3 |
|        4 |        6 |        8 |
|        5 |        7 |        9 |
+----------+----------+----------+
3 rows in set (0.00 sec)
```

在 MySQL 8.0.21 及更高版本中，[`价值观`](values.html)声明还支持一个`限制`用于限制输出中的行数的子句。（之前，`限制`被允许但什么也没做。）

这`价值观`关于列值的数据类型的语句是允许的；您可以在同一列中混合类型，如下所示：

```
mysql> VALUES ROW("q", 42, '2019-12-18'),
    ->     ROW(23, "abc", 98.6),
    ->     ROW(27.0002, "Mary Smith", '{"a": 10, "b": 25}');
+----------+------------+--------------------+
| column_0 | column_1   | column_2           |
+----------+------------+--------------------+
| q        | 42         | 2019-12-18         |
| 23       | abc        | 98.6               |
| 27.0002  | Mary Smith | {"a": 10, "b": 25} |
+----------+------------+--------------------+
3 rows in set (0.00 sec)
```

重要的

`价值观`有一个或多个实例`排（）`充当表值构造函数；虽然它可以用来提供值[`插入`](insert.html)要么[`代替`](replace.html)声明，不要将其与`价值观`也用于此目的的关键字。您也不应该将其与[`值（）`](miscellaneous-functions.html#function_values)引用列值的函数[`插入 ... 在重复密钥更新时`](insert-on-duplicate.html).

你还应该记住`排（）`是一个行值构造函数（参见[第 13.2.11.5 节，“行子查询”](row-subqueries.html)， 然而`值行（）`是一个表值构造函数；两者不能互换使用。

[`价值观`](values.html)可以在您可以雇用的许多情况下使用[`选择`](select.html)，包括此处列出的内容：

-   和[`联盟`](union.html)，如此处所示：

    ```
    mysql> SELECT 1,2 UNION SELECT 10,15;
    +----+----+
    | 1  | 2  |
    +----+----+
    |  1 |  2 |
    | 10 | 15 |
    +----+----+
    2 rows in set (0.00 sec)

    mysql> VALUES ROW(1,2) UNION VALUES ROW(10,15);
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        1 |        2 |
    |       10 |       15 |
    +----------+----------+
    2 rows in set (0.00 sec)
    ```

    您可以将具有多行的构造表联合在一起，如下所示：

    ```
    mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6)
         >     UNION VALUES ROW(10,15),ROW(20,25);
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        1 |        2 |
    |        3 |        4 |
    |        5 |        6 |
    |       10 |       15 |
    |       20 |       25 |
    +----------+----------+
    5 rows in set (0.00 sec)
    ```

    您也可以（通常最好）省略[`联盟`](union.html)完全在这种情况下，并使用一个单一的**`价值观`**声明，像这样：

    ```
    mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6), ROW(10,15), ROW(20,25);
    +----------+----------+
    | column_0 | column_1 |
    +----------+----------+
    |        1 |        2 |
    |        3 |        4 |
    |        5 |        6 |
    |       10 |       15 |
    |       20 |       25 |
    +----------+----------+
    ```

    `价值观`也可以在工会中使用[`选择`](select.html)陈述，[`桌子`](table.html)陈述，或两者兼而有之。

    中构造的表[`联盟`](union.html)必须包含相同数量的列，就像您使用[`选择`](select.html).看[第 13.2.10.3 节，“联合条款”](union.html)，以获取更多示例。

-   在加入。看[第 13.2.10.2 节，“JOIN 子句”](join.html)，了解更多信息和示例。

-   代替[`值（）`](miscellaneous-functions.html#function_values)在一个[`插入`](insert.html)要么[`代替`](replace.html)语句，在这种情况下，其语义与此处描述的略有不同。看[第 13.2.6 节，“INSERT 语句”](insert.html), 了解详情。

-   代替源表[`创建表...选择`](create-table-select.html)和[`创建视图...选择`](create-view.html).有关更多信息和示例，请参阅这些语句的描述。
