«Будь швидким або помри»! Будь лідером з NeoSeo, деталі акції...

Як перевести всі таблиці в движок MyISAM для Інтернет-магазину {SEO-Магазин}, OpenCart 2.х, 3.х, ocStore

Коли мова йде про інтернет-магазин, движок MyISAM має значну перевагу, так як 99% операцій – це читання таблиць. Але іноді з якихось причин, може бути зазначений движок InnoDB при створенні таблиць для свого модуля, і тоді доводиться вручну виправляти.

Для того, щоб заощадити час, можна використовувати програмне рішення, яке переведе всі таблиці в MyISAM в один клік:

DROP PROCEDURE IF EXISTS convertToMyIsam

Для того, щоб заощадити час можна використовувати програмне рішення, яке переведе всі таблиці в MyISAM в один клік:

DROP PROCEDURE IF EXISTS convertToMyIsam;

DELIMITER //

CREATE PROCEDURE convertToMyIsam ()

BEGIN

mainloop: LOOP

  SELECT TABLE_NAME INTO @convertTable FROM information_schema.TABLES

  WHERE `TABLE_SCHEMA` LIKE DATABASE ()

  AND `ENGINE` LIKE 'InnoDB' ORDER BY TABLE_NAME LIMIT 1;

  IF @convertTable IS NULL THEN

    LEAVE mainloop;

  END IF;

  SET @sqltext: = CONCAT ( 'ALTER TABLE `', DATABASE (), '` .`', @convertTable, ' `ENGINE = MyISAM');

  PREPARE convertTables FROM @sqltext;

  EXECUTE convertTables;

  DEALLOCATE PREPARE convertTables;

  SET @convertTable = NULL;

END LOOP mainloop;

END //

DELIMITER;

CALL convertToMyIsam ();

DROP PROCEDURE IF EXISTS convertToMyIsam;

Якщо ви віддаєте перевагу використовувати InnoDB і вас обтяжує наявність таблиць MyISAM, то можна використовувати зворотний варіант скрипта:

DROP PROCEDURE IF EXISTS convertToInnodb;

DELIMITER //

CREATE PROCEDURE convertToInnodb ()

BEGIN

mainloop: LOOP

SELECT TABLE_NAME INTO @convertTable FROM information_schema.TABLES

WHERE `TABLE_SCHEMA` LIKE DATABASE ()

AND `ENGINE` LIKE 'MyISAM' ORDER BY TABLE_NAME LIMIT 1;

IF @convertTable IS NULL THEN

LEAVE mainloop;

END IF;

SET @sqltext: = CONCAT ( 'ALTER TABLE `', DATABASE (), '` .`', @convertTable, ' `ENGINE = INNODB');

PREPARE convertTables FROM @sqltext;

EXECUTE convertTables;

DEALLOCATE PREPARE convertTables;

SET @convertTable = NULL;

END LOOP mainloop;

END //

DELIMITER;

CALL convertToInnodb ();

DROP PROCEDURE IF EXISTS convertToInnodb;