1

質問があります:

SELECT * FROM tb WHERE id=1 
AND 
sleep(CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15);

私はそれがどのように機能するかを理解しようとしています。

1)SELECT * FROM tb WHERE id = 1#これは簡単です説明は必要ありません

2) sleep(CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15);#これは私にとって厄介な問題です。

私は物事が次のようになっていると信じています:(-> CAST((SELECT'a' REGEXP'^ [nz]')ASsigned)の結果に15を掛けたもの。

私の懸念は次のとおりです。

  • CASTは(たとえば文字列から日付に)変換する関数ですが、ここでは符号付き数値の文字列を変換するために使用されます。それは正しいですか?

  • REGEXPは、このように使用されていると思い(SELECT 'a' REGEXP '^[n-z]')ます。0(ゼロ)を返すため、15を掛けると常に0になります。ただし、(SELECT 'p' REGEXP '^[n-z]')1を返すため、この場合、DBMSは15秒間スリープします。

したがって、最後の質問は次のとおりです。

  • tbに「bob」という名前のレコードが1つしかない場合、データベースは15秒間一時停止しますか?
4

1 に答える 1

2

tb に「bob」という名前のレコードが 1 つしかない場合、データベースは 15 秒間一時停止しますか?

いいえ、このクエリでは、レコードから完全に独立して常に 0 を返すため、データベースが一時停止することCAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15はありません。テーブルの列は使用されません。「a」は文字列リテラルです。

しかしそれ以外は、あなたはそれを正しく分析しました。あなたが示したクエリは意味がありません。

于 2013-01-28T18:33:27.637 に答える