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

MySQL Rollback Query

Nogle gange skal du muligvis fortryde ændringerne i MySQL-databasen. Du kan nemt gøre det ved at bruge MySQL Rollback-forespørgsel. Sådan ruller du MySQL-databasen tilbage ved hjælp af MySQL Rollback-kommandoen.

Hvordan fungerer MySQL rollback

MySQL Rollback-sætning giver dig mulighed for at rulle tilbage eller fortryde endnu en sætning, der for nylig er blevet udført. For eksempel, hvis du ved et uheld har slettet eller opdateret rækker, kan du bruge MySQL tilbagerulning af disse udsagn og gendanne originale databaser. MySQL rollback virker dog kun, hvis databaseændringerne IKKE er blevet forpligtet til databasen.

Bonus Læs:Sådan bruger du MySQL Rollup

Kan vi rulle tilbage efter commit i MySQL

Nej. Desværre kan du ikke fortryde ændringer, der er blevet forpligtet til databasen.

Sådan ruller du MySQL-databasen tilbage

Bemærk venligst, at MySQL som standard er konfigureret til automatisk at foretage hver SQL-forespørgsel. Så det er vigtigt at slå auto commit fra i MySQL ved hjælp af følgende sætning, hvis du vil være i stand til at bruge MySQL Rollback.

Log ind på MySQL-databasen og kør følgende kommando for at deaktivere autocommit

SET autocommit = 0

Eller

SET autocommit = OFF

Du bruger følgende sætning til eksplicit at aktivere autocommit-tilstand:

SET autocommit = 1

Eller

SET autocommit = ON

Bonuslæser:Sådan tjekker du MySQL-version

Lad os sige, at du har følgende tabel salg(produkt,ordre_dato,udsalg) . Vi vil se på, hvordan du udsteder MySQL-tilbageføring efter slettekommando.

mysql> select * from sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-01-01 |   20 |
| B       | 2020-01-02 |   25 |
| B       | 2020-01-03 |   15 |
| A       | 2020-01-04 |   30 |
| A       | 2020-01-05 |   20 |
+---------+------------+------+

Lad os nu slå autocommit fra som nævnt ovenfor,

mysql> set autocommit=0;

Lad os derefter slette alle rækker i salgstabellen.

mysql> delete from sales;
Query OK, 5 rows affected (0.00 sec)

mysql> select count(*) from sales;
+----------+
| count(*) |
+----------+
|        0 |
+----------+

Som du kan se er alle de 5 rækker i salgstabellen blevet slettet.

Lad os nu udstede MySQL Rollback efter slettekommando

mysql> rollback;
Query OK, 0 rows affected (0.07 sec)

mysql> select count(*) from sales;
+----------+
| count(*) |
+----------+
|        5 |
+----------+

Som du kan se, er de 5 slettede rækker blevet gendannet, da ændringerne ikke blev foretaget. Men hvis du havde problemer med COMMIT-sætning efter sletning og før ROLLBACK-kommandoen, så ville MySQL ikke have gendannet din tabel.

Bonuslæser:Sådan deaktiveres tjek af fremmed nøgle i MySQL

MySQL Rollback Update-kommando

På samme måde kan du rulle tilbage opdateringskommando. Lad os opdatere udsalget kolonne i ovenstående salg tabel.

mysql> set autocommit=0;

mysql> select * from sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-01-01 |   20 |
| B       | 2020-01-02 |   25 |
| B       | 2020-01-03 |   15 |
| A       | 2020-01-04 |   30 |
| A       | 2020-01-05 |   20 |
+---------+------------+------+
5 rows in set (0.00 sec)

mysql> update sales set sale=sale*2;
Query OK, 5 rows affected (0.05 sec)


mysql> select * from sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-01-01 |   40 |
| B       | 2020-01-02 |   50 |
| B       | 2020-01-03 |   30 |
| A       | 2020-01-04 |   60 |
| A       | 2020-01-05 |   40 |
+---------+------------+------+

Som du kan se, har vi fordoblet salgskolonnens værdi. Lad os nu rulle tilbage opdateringskommando.

mysql> rollback;

mysql> select * from sales;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-01-01 |   20 |
| B       | 2020-01-02 |   25 |
| B       | 2020-01-03 |   15 |
| A       | 2020-01-04 |   30 |
| A       | 2020-01-05 |   20 |
+---------+------------+------+

Som du kan se, er salgskolonnen gamle værdier blevet gendannet.

Du kan også inkludere MySQL Rollback i lagrede procedurer og MySQL-transaktioner for MySQL Rollback ved fejl. Nøglen er at deaktivere autocommit for at udføre MySQL rollback.

Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Fremstil DISTINCT-værdier i STRING_AGG

  2. MariaDB JSON_OBJECTAGG() Forklaret

  3. Sådan nummereres rækker i SQL

  4. Ryd Hibernate 2. niveaus cache efter manuel DB-opdatering