sql >> データベース >  >> RDS >> Mysql

複数のSQLステートメントを個々のSQLステートメントに分割する

    これが可能かどうかはまったくわかりません。確かに、ターゲットDBMSのSQL構文に関する深い知識が必要になります。たとえば、頭のてっぺんからこれは単一のMySQLステートメントです:

    INSERT INTO things
    SELECT * FROM otherthings ON DUPLICATE KEY
    UPDATE thingness=thingness+1
    

    一部のDBMSには、区切り文字がないとあいまいになる可能性のある構造が存在する可能性があります。

    私はあなたが強制されるかもしれないと思います。これは、SQLステートメントを区切るための完全に標準的な方法です。おそらくSQLステートメントの開始点を検出するヒューリスティックを見つけたとしても、WHERE句なしで偶発的な「DELETEFROMthings」のような災害のリスクがあります。

    新しいステートメントの二重改行は受け入れられますか?

    いいえ、 セミコロン区切り文字である正規表現は、SQLを解析するのに十分なほど強力ではありません。問題点は次のとおりです。

    ';'
    ";"
    `;`
    '\';'
    ''';'
    -- ;
    #;
    /*;*/
    

    およびこれらの構造の介在。 Eek!



    1. DockerでのPostgreSQLバックアップの検証

    2. SQLclフォーマットオプション(Oracle)

    3. MySQLは複数の値に等しい場所を選択します

    4. Debian9にMariaDBをインストールして保護する方法