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

MySQLTempテーブル挿入

    Code-Monkが書いたものに取り組んでいる場合は、次のことを考慮してください。

    drop procedure if exists uspK;
    DELIMITER $$
    create procedure uspK ()
    BEGIN
        drop temporary table if exists temp; -- could be some other random structure residue
    
        create temporary table temp
        SELECT aID, bID
        FROM tags
        WHERE placeID = "abc" AND tagID = "def";
    
        -- use the temp table somehow
        -- ...
        -- ...
        -- ...
    
        drop temporary table temp; -- otherwise it survives the stored proc call
    END
    $$ -- signify end of block
    DELIMITER ; -- reset to default delimiter
    

    テストストアドプロシージャ

    call uspK(); -- test it, no warnings on edge conditions
    

    すべきでないこと

    しない 以下で多くの幸運を見つけてください。そう思う場合は、数回実行してください;

    drop procedure if exists uspK;
    DELIMITER $$
    create procedure uspK ()
    BEGIN
        -- drop temporary table if exists temp;
    
        create temporary table if not exists temp
        SELECT aID, bID
        FROM tags
        WHERE placeID = "abc" AND tagID = "def";
    
        -- use the temp table somehow
        -- ...
        -- ...
        -- ...
    
        -- drop temporary table temp; -- otherwise it survives the stored proc call
    END
    $$ -- signify end of block
    DELIMITER ; -- reset to default delimiter
    

    create temporary table if not exists temp 薄っぺらです

    一般的なコメント

    DELIMITERSの単純なトピックにある程度堪能になるまで、ストアドプロシージャの作成に着手するべきではありません。 こちら のセクションでそれらについて書きました 区切り文字と呼ばれます 。デバッグに多くの時間を浪費する可能性があるよりも、このような単純なことに不必要な無駄な時間を費やすことを望んでいます。

    また、ここでの質問とそのリファレンスでは、テーブルの作成は DDLであることに注意してください。 できる 全体的なプロファイリング(パフォーマンス)の大部分を占めています。既存のテーブルを使用する場合と比較して、procの速度が低下します。呼び出しは瞬時に行われると思うかもしれませんが、そうではありません。そのため、パフォーマンスのために、結果が独自のセグメント化されたrowIdに配置された既存のテーブルを使用すると、DDLオーバーヘッドに耐えるよりもはるかに高速になります。



    1. 次回営業している時間を見つけましょう。 mysql時間の計算

    2. mySQLは同じテーブルに2回結合します

    3. MySQLの列挙型はNOTNULLである必要がありますか?

    4. これらの奇妙な文字を変換する方法は? (ë、Ã、ì、ù、Ã)