• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • VALUES语句

    VALUES是MySQL 8.0.19中引入的DML语句,该语句返回一组一个或多个行作为表。换句话说,它是一个表值构造函数,还可以充当独立的SQL语句。

    VALUES row_constructor_list [ORDER BY column_designator] [LIMIT BY number]
    
    row_constructor_list:
        ROW(value_list)[, ROW(value_list)][, ...]
    
    value_list:
        value[, value][, ...]    
    
    column_designator:
        column_index
    

    VALUES语句由VALUES关键字组成,后跟一个或多个行构造函数的列表,以逗号分隔。行构造函数由ROW()行构造函数组成,该函数具有一个或多个标量值的值列表作为其参数。值可以是任何MySQL数据类型的文字,也可以是解析为标量值的表达式。

    ROW()不能为空(但可以为NULL)。ROW()VALUES一条语句中的每个语句在其值列表中必须具有相同数量的值。

    DEFAULT关键字不受支持,VALUES并会导致语法错误,除非用于在INSERT语句中提供值。

    输出VALUES是一个表:

    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有隐含命名的列column_0column_1column_2,等等,总是开始0。此事实可用于使用可选ORDER BY子句按列对行进行排序,与该子句与SELECT语句一起使用的方式相同,如下所示:

    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)
    

    VALUES语句还支持LIMIT用于限制输出中的行数的子句。

    VALUES语句关于列值的数据类型是允许的;您可以在同一列中混合类型,如下所示:

    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)
    
    重要

    VALUES具有一个或多个act实例ROW()作为表值构造函数;尽管它可以用于在INSERTor REPLACE语句中提供值,但不要将其与VALUES也用于此目的的关键字混淆。您也不应将其与VALUES()引用中的列值的函数混淆INSERT ... ON DUPLICATE KEY UPDATE

    另外,不要VALUES ROW()ROW()行构造函数的形式混淆(请参见“ROW子查询”)。

    VALUES可以在许多您可以雇用的情况下使用SELECT,包括此处列出的那些情况:

    • 使用UNION,如下所示:

      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)
      

      VALUES也可以与SELECT语句,TABLE语句或两者结合使用。

      中的构造表UNION必须包含相同数量的列,就像使用一样SELECT。有关更多示例,请参见“ UNION子句”。

    • 在加入。有关更多信息和示例,请参见“ JOIN子句”。
    • 在地方的VALUES()INSERTREPLACE声明,在这种情况下,它的语义从这里描述的是什么略有不同。有关详细信息,请参见“ INSERT语句”。
    • 代替源表中CREATE TABLE ... SELECTCREATE VIEW ... SELECT。有关更多信息和示例,请参见这些语句的描述。