Как «обновить таблицу, если таблица существует» с MySQL Dump? - PullRequest
2 голосов
/ 22 декабря 2011

В настоящее время я создаю дамп таблиц MySQL с помощью mysqldump.

. В настоящее время создается дамп:

DROP TABLE IF EXISTS `versions`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `versions` (
  `major` int(11) NOT NULL DEFAULT '0',
  `minor` int(11) NOT NULL DEFAULT '0',
  `revision` int(11) NOT NULL DEFAULT '0',
  `build` int(11) NOT NULL DEFAULT '0',
  `date_installed` datetime NOT NULL,
  `current` tinyint(4) NOT NULL DEFAULT '0',
  `product_type` varchar(30) DEFAULT NULL,
  `product` varchar(30) DEFAULT NULL,
  `product_class_name` varchar(80) DEFAULT NULL,
  `lazy_load` tinyint(4) NOT NULL DEFAULT '0',
  `sitewide` tinyint(4) NOT NULL DEFAULT '0',
  UNIQUE KEY `versions_pkey` (`product`,`major`,`minor`,`revision`,`build`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

То, что я хотел бы, чтобы дамп сказал, выглядит примерно так:

IF TABLE EXISTS, UPDATE IT TO MATCH THIS STRUCTURE (
  `major` int(11) NOT NULL DEFAULT '0',
  `minor` int(11) NOT NULL DEFAULT '0',
  `revision` int(11) NOT NULL DEFAULT '0',
  `build` int(11) NOT NULL DEFAULT '0',
  `date_installed` datetime NOT NULL,
  `current` tinyint(4) NOT NULL DEFAULT '0',
  `product_type` varchar(30) DEFAULT NULL,
  `product` varchar(30) DEFAULT NULL,
  `product_class_name` varchar(80) DEFAULT NULL,
  `lazy_load` tinyint(4) NOT NULL DEFAULT '0',
  `sitewide` tinyint(4) NOT NULL DEFAULT '0',
  UNIQUE KEY `versions_pkey` (`product`,`major`,`minor`,`revision`,`build`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Возможно ли это с помощью дампа MySQL (или вообще любых других инструментов, связанных с MySQL)?

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 декабря 2011

Вам может потребоваться вывести схему заранее и преобразовать CREATE TABLE в CREATE TABLE IF NOT EXISTS

mysqldump -u... -p... --no-data --skip-add-drop-table ... --all-databases | sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' > MYSQLSchema.sql

Это позволит обойти добавление команды DROP TABLE IF EXISTS versions; и преобразовать CREATE TABLE в CREATE TABLE IF NOT EXISTS.

Попробуй !!!

0 голосов
/ 29 декабря 2011

Когда вы выгружаете базу данных, вы можете установить / сбросить флаг, генерирующий команду DROP TABLE.

...