する
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の互換性
TiDB のDO
ステートメントは MySQL と完全な互換性があります。互換性の違いが見つかった場合は、 バグを報告 .