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

MySQLのデータベーストランザクション内のCodeception受け入れテスト

    他のオプションは常にあります:)。

    私の場合、非常に大規模なデータベースもあるため、ダンプを使用することは問題外でした(エッセンシャルまで削除すると1.2 GB、ライブでは250 GBを超える)代わりに、レコードを削除する.sqlファイルがたくさんあります特定のテストによって挿入されました。

    クエリを実行するためのこの関数を持つクラスDbHelperがあります:

    public function executeOnDatabase($path_to_sql_file)
    {
        $sql = file_get_contents($path_to_sql_file);
        $dbh = $this->getModule('Db')->dbh;
        $this->debugSection('Query', $sql);
        $sth = $dbh->prepare($sql);
    
        return $sth->execute();
    }
    

    魅力として機能し、テストを実行するオーバーヘッドがなくなります。

    更新:

    ユーザーとその関連データを扱う場合、通常、削除する必要のあるすべてのレコードをターゲットにするのは非常に簡単です。ほとんどの場合、ユーザー名と電子メールは一意であり、それらを使用してユーザーのID(自動増分主キー)を取得できます。そのIDは、関連するテーブルで使用されている可能性があります。たとえば、次のようになります。

    SET @user_id = (SELECT `id` FROM `users` WHERE `username` = 'rgsfdg');
    SET @email = '[email protected]';
    DELETE FROM `mail_queue` WHERE `send_to` = @email;
    DELETE FROM `user_settings` WHERE `user_id` = @user_id;
    DELETE FROM `users` WHERE `id` = @user_id;
    



    1. PostgreSQLでのDegrees()関数のしくみ

    2. PostgreSQL 9.5以降のJSON配列への追加(プッシュ)と削除

    3. Railsで動的にクエリを構築する

    4. Django:復元(移行)後にデータベースにアクセスしようとしたときにアクセス許可が拒否されました