行う
DOは式を実行しますが、結果を返しません。ほとんどの場合、 DOは結果を返さないSELECT expr, ...に相当します。
ノート:
DOは式のみを実行します。SELECTが使用できるすべての場合に使用できるわけではありません。たとえば、DO id FROM t1はテーブルを参照しているため無効です。
MySQL での一般的な使用例は、ストアド プロシージャまたはトリガーを実行することです。 TiDB はストアド プロシージャまたはトリガーを提供しないため、この関数の用途は限られています。
あらすじ
- DoStmt
 - ExpressionList
 - Expression
 
DoStmt   ::= 'DO' ExpressionList
ExpressionList ::=
    Expression ( ',' Expression )*
Expression ::=
    ( singleAtIdentifier assignmentEq | 'NOT' | Expression ( logOr | 'XOR' | logAnd ) ) Expression
|   'MATCH' '(' ColumnNameList ')' 'AGAINST' '(' BitExpr FulltextSearchModifierOpt ')'
|   PredicateExpr ( IsOrNotOp 'NULL' | CompareOp ( ( singleAtIdentifier assignmentEq )? PredicateExpr | AnyOrAll SubSelect ) )* ( IsOrNotOp ( trueKwd | falseKwd | 'UNKNOWN' ) )?
例
この SELECT ステートメントは一時停止しますが、結果セットも生成します。
mysql> SELECT SLEEP(5);
+----------+
| SLEEP(5) |
+----------+
|        0 |
+----------+
1 row in set (5.00 sec)
一方、DO は結果セットを生成せずに一時停止します。
mysql> DO SLEEP(5);
Query OK, 0 rows affected (5.00 sec)
mysql> DO SLEEP(1), SLEEP(1.5);
Query OK, 0 rows affected (2.50 sec)
MySQL の互換性
このステートメントは、MySQL と完全に互換性があると理解されています。互換性の違いは、GitHub で問題を介して報告されたにする必要があります。