phpMyAdmin
 sql >> база данни >  >> Database Tools >> phpMyAdmin

Мога ли да използвам транзакции с ALTER TABLE?

Някои изрази (най-вече DDL ) в MySQL предизвиква имплицитен комит преди те се изпълняват и не могат да бъдат върнати назад - като такова това предотвратява и връщането на предишни промени в DML.

Изявленията, изброени в този раздел (и всички синоними за тях) имплицитно завършват всяка транзакция, активна в текущата сесия, сякаш сте направили COMMIT преди да изпълните оператора . От MySQL 5.5.3 повечето от тези оператори също причиняват имплицитен комит след изпълнение; за допълнителни подробности вижте края на този раздел.

Тъй като ALTER TABLE е един от засегнатите изрази, SQL пакетът ефективно се третира като:

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;

Предложеното решение е да запазите DDL и DML разделени . документацията казва:

Трябва да проектирате вашите [DML] транзакции така, че да не включват такива [DDL] изрази. Ако издадете изявление в началото на транзакция, която не може да бъде върната назад, и след това друго изявление по-късно се провали, пълният ефект на транзакцията не може да бъде отменен в такива случаи чрез издаване на оператор ROLLBACK.




  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Как да увеличите лимита за размер на импортиране в phpMyAdmin

  2. Разширението mbstring липсва. Моля, проверете вашата PHP конфигурация

  3. xampp mysql сървърът не се стартира

  4. Мога ли да използвам транзакции с ALTER TABLE?

  5. да стигнем до phpmyadmin с mamp