Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создать БД и таблицы заполнить - только в случае если этого еще нет.  (Прочитано 7168 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
malor
Опытный

ru
Offline Offline

« : 27-11-2011 14:28 » 

Допустим. вы переустанавливаете MySQL-сервер. В прошлом у вас была какая-то БД. Поставив MySQL заново, при условии что в конфиге одно и тоже значение у переменной datadir, вы получите доступ к своей прежней БД.
Возьмем случай, что вы не в курсе, была ли сохранена база (имя - "mybase") или нет.

1) Вы запускаете:
"%PROGRAMFILES%\MySQL\MySQL Server 5.5\bin\mysql" -uroot -p123456 -e "CREATE DATABASE IF NOT EXISTS mybase"
Безопасная команда, как видим.

2) Затем заносите в нее данные:
"%PROGRAMFILES%\MySQL\MySQL Server 5.5\bin\mysql" -uroot -p123456 mybase < myolddump.txt

Файл myolddump.txt имеет такое содержимое:

Код: (MySQL)
DROP TABLE IF EXISTS `my_main_table`;
CREATE TABLE `my_main_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `item` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;


--
-- Dumping data for table `my_main_table`
--

LOCK TABLES `my_main_table` WRITE;
INSERT INTO `my_main_table` VALUES (1,'строка1'),(2,'строка2'),(3,'строка3'),(4,'строка4'),(5,'строка5');
UNLOCK TABLES;


Вместо :

Код: (MySQL)
DROP TABLE IF EXISTS `my_main_table`;
CREATE TABLE `my_main_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `item` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;

вероятно нужно написать:

Код: (MySQL)
CREATE TABLE IF NOT EXISTS `my_main_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `item` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;

А на что заменить участок

Код: (MySQL)
LOCK TABLES `my_main_table` WRITE;
INSERT INTO `my_main_table` VALUES (1,'строка1'),(2,'строка2'),(3,'строка3'),(4,'строка4'),(5,'строка5');
UNLOCK TABLES;
?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 27-11-2011 14:48 » 

м... зачем?
Объясни что хочешь?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
malor
Опытный

ru
Offline Offline

« Ответ #2 : 27-11-2011 15:25 » 

Захотел, например, переставить сервак на новую версию MySQL - запустил инсталлятор, он выполнил установку MySQL 5.5.XX, а затем запускает bat-файл с инструкциями, создающими БД и заполняющими ее содержимым. А раз содержимое уже есть, то нужно чтоб SQL-инструкции не выполнились.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 27-11-2011 15:46 » new

так не получится...
Ведь ты реально не знаешь об актуальном состоянии базы.
Тем более если ты, например дропаешь таблицу если она существует.

Или уж писать свою обработку, но не вижу в этом смысла.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 27-11-2011 16:26 » 

malor, если тебе нужно автоматизировать, то перед сносом программы делай бекап базы, а после сноса программы или перед ее установкой - сноси базу. Все остальное - ручной труд. Все давно придумано и описано.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines