sql >> Databasteknik >  >> RDS >> Mysql

Codeception acceptanstest inom databastransaktion på MySQL

Det finns alltid andra alternativ :).

I mitt fall var det uteslutet att använda en dump eftersom vi också har en mycket stor databas (1,2 GB när det är avskalat till det väsentliga,>250 GB på live). Istället har jag ett gäng .sql-filer som tar bort alla poster som infogades av ett specifikt test.

Jag har en klass DbHelper som har denna funktion för att köra frågor:

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();
}

Fungerar som en charm, och inte längre att köra testerna.

Uppdatering:

Om du hanterar användare och deras relaterade data är det vanligtvis ganska enkelt att rikta in alla poster du behöver ta bort. Mest troligt är användarnamnet och e-postadressen unika, och du kan använda dem för att få användarens id (automatisk inkrementering av primärnyckeln). Detta ID används troligen i de relaterade tabellerna. Till exempel så här:

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. Returnera alla möjliga kombinationer av värden på kolumner i SQL

  2. Användningsfall för MariaDB och Docker, del 1

  3. get_result() Fungerar inte även mysqlnd är aktiverat

  4. Importera fält med flera värden till Solr från mySQL med Solr Data Import Handler