sql >> Database teknologi >  >> Database Tools >> phpMyAdmin

Kan jeg bruge transaktioner med ALTER TABLE?

Nogle udsagn (især DDL ) i MySQL forårsage en implicit commit før de udføres og kan ikke rulles tilbage - som sådan forhindrer dette de tidligere DML-ændringer i også at blive rullet tilbage.

Udsagn, der er anført i denne sektion (og eventuelle synonymer for dem) slutter implicit enhver transaktion, der er aktiv i den aktuelle session, som om du havde lavet en COMMIT, før du udførte sætningen . Fra og med MySQL 5.5.3 forårsager de fleste af disse udsagn også en implicit commit efter eksekvering; for yderligere detaljer, se slutningen af ​​dette afsnit.

Siden ALTER TABLE er en af ​​de berørte sætninger, behandles SQL-batchen effektivt som:

START TRANSACTION;
INSERT INTO `users` VALUES(NULL, 'User A', '[email protected]', '4', 'User A');

COMMIT; -- prevents ROLLBACK of insert(s), even if DDL fails
ALTER TABLE `users` CHANGE `level` `level` TINYINT(3) UNSIGNED NOT NULL;

Den foreslåede løsning er at holde DDL og DML adskilt . dokumentationen siger:

Du bør designe dine [DML]-transaktioner til ikke at inkludere sådanne [DDL]-udsagn. Hvis du udsteder en erklæring tidligt i en transaktion, som ikke kan rulles tilbage, og en anden erklæring senere mislykkes, kan den fulde effekt af transaktionen ikke rulles tilbage i sådanne tilfælde ved at udstede en ROLLBACK-erklæring.




  1. Dårlige kardinalitetsestimater kommer fra SSMS-udførelsesplaner

  2. PhpMyAdmin og Mysql databaser

  3. Hvordan åbner man en rpt-fil som en SQL-tabel?

  4. Søg i PHPMYADMIN-databasen efter lignende poster