sql >> Databáze >  >> Database Tools >> phpMyAdmin

Mohu používat transakce s ALTER TABLE?

Některá prohlášení (zejména DDL ) v MySQL způsobit implicitní potvrzení před jsou provedeny a nelze je vrátit zpět - jako takové to zabraňuje tomu, aby byly vráceny zpět i předchozí změny DML.

Příkazy uvedené v této části (a všechna jejich synonyma) implicitně ukončují jakoukoli transakci aktivní v aktuální relaci, jako byste před provedením příkazu provedli COMMIT . Od verze MySQL 5.5.3 většina těchto příkazů také po provedení způsobí implicitní potvrzení; další podrobnosti naleznete na konci této části.

Od ALTER TABLE je jedním z ovlivněných příkazů, s dávkou SQL se účinně zachází jako:

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;

Navrhovaným řešením je ponechat DDL a DML oddělené . dokumentace říká:

Měli byste navrhnout své transakce [DML] tak, aby takové příkazy [DDL] nezahrnovaly. Pokud na začátku transakce vydáte příkaz, který nelze vrátit zpět, a později selže jiný příkaz, nelze v takových případech odvolat plný účinek transakce vydáním příkazu ROLLBACK.




  1. Automatické zvýšení o 1 v MySQL s clearDB

  2. 127.0.0.1 je přístupný/funkční, ale localhost není přístupný/nefunkční

  3. MySql - WAMP - Obrovská tabulka je velmi pomalá (20 milionů řádků)

  4. TSQL Query vrací hodnoty pro každou hodinu za posledních 24 hodin