sql >> Database teknologi >  >> RDS >> Mysql

Codeception-accepttest inden for databasetransaktion på MySQL

Der er altid andre muligheder :).

I mit tilfælde var det udelukket at bruge et dump, fordi vi også har en meget stor database (1,2 GB, når det er fjernet til det væsentlige,>250 GB på live). I stedet har jeg en masse .sql-filer, der fjerner alle poster der blev indsat ved en specifik test.

Jeg har en klasse DbHelper, der har denne funktion til at køre forespørgsler:

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

Fungerer som en charme, og ikke mere overhead ved at køre testene.

Opdatering:

Hvis du beskæftiger dig med brugere og deres relaterede data, er det normalt ret nemt at målrette mod alle poster, du skal fjerne. Mest sandsynligt er brugernavnet og e-mailen unikke, og du kan bruge dem til at få brugerens id (auto-increment primær nøgle). Dette id bruges sandsynligvis i de relaterede tabeller. For eksempel som dette:

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. MySQL:hvordan man får forskellen mellem to tidsstempler på sekunder

  2. SQL-forespørgsel, hvor feltet IKKE INDEHOLDER $x

  3. MySql randomiser de sidste 10 rækker

  4. Sådan finder du standardfilplaceringen for datafiler og logfiler i SQL Server