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

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

il
Offline Offline
Пол: Мужской
Бодрый птах


« : 03-02-2004 08:33 » 

Проблема простая.
Есть старая база сайта и есть новая база сайта,расширенная.
Написать конвертор нет проблем.

Проблема в том, что как в первой так и во второй базе для статей и др. материалов в таблице есть поле id - которое имеет свойство автоинкремент.

Однако все старые ссылки на сайт ведут чаще всего на конкретные статьи и материалы.

https://club.shelek.ru/viewart.php?id=100 говорит о том, что статья 100 по номеру.

Если просто перебросить статьи то получится бардак, по описанию статьи о сокетах человек будет попадать на статью по оружию Жаль

Как правильно записывать в нговую базу статьи - не только с сохранением старых ID но и для обеспечения продолжения списка уникальных номеров ID автоинкрементом.
Дабы перенеся статьи и получив последний номер 150 при добавлении новой статьи ее номер пошел бы 151 и т.д.

И так для всех таблиц.
Записан

А птичку нашу прошу не обижать!!!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 03-02-2004 08:55 » 

а нельзя в новой базе поле выставить как integer, писать as is, а потом переделать поле на autoincrement, поставив минимальное значение равное максимально записанному? на ib/mssql/oracle/etc я бы сделал такое свободно, а вот в mysql - увы, не помню Улыбаюсь
Записан

Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 03-02-2004 09:33 » 

Так можно - но мне хочется автоматизировать - понятно, что можно выкрутится.
Записан

А птичку нашу прошу не обижать!!!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #3 : 03-02-2004 09:47 » 

если поддерживаются триггера, то можно увеличение поля прписать в триггере на вставку. если передаваемое значение рано NULL, то делаем автоинкремент, если не равно - то пишем то, что есть.
Записан

Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #4 : 03-02-2004 10:45 » 

x77, Как
Записан

А птичку нашу прошу не обижать!!!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #5 : 03-02-2004 11:00 » 

у меня mysql нету Жаль я бы глянул. где его качнуть мона по фтп? пхп я настроил, наконец, у тебя в аське буря восторгов по этому поводу Улыбаюсь щас найду где майскл залить, и буит щастье.
Записан

PSD
Главный специалист

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

« Ответ #6 : 03-02-2004 11:11 » 

В SQL Server я снимал с поля  автоинкримент (идентити) заливал базу ставил автоинкримент .....

Но  SQL Server  позволяет в любой момент сделать поле автоинкриментным ...
Записан

Да да нет нет все остальное от лукавого.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 03-02-2004 11:56 » 

в mysql не поддерживаются ни триггера, ни хранимые процедуры. ХП планировалось ввести в версии 5.0, о триггерах вообще речи нет. Короче, Гром, сделай руками и не мучайся. или скрипт пиши, который делает обновление а потом меняет тип поля на автоикремент.
Записан

Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #8 : 03-02-2004 11:58 » 

x77, качнуть mysql.org качай хоть для винды, хоть для никсов.

В общем понятно.
Записан

А птичку нашу прошу не обижать!!!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #9 : 03-02-2004 12:05 » 

Для версии 3.23

Поле AUTO_INCREMENT
При добавлении новой записи с явно указанным значением в столбце произойдет одно из двух. Если запись с таким значением уже существует, возникает ошибочная ситуация, т.к. значения столбца должны быть уникальны. Если строка с таким значением отсутствует, новое значение станет новым максимумом последовательности

книга Поль Дюбуа "MySQL"
Записан

I Have Nine Lives You Have One Only
THINK!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #10 : 03-02-2004 12:20 » new

HandKot,  максимумом??? а не минимумом?
Записан

PSD
Главный специалист

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

« Ответ #11 : 03-02-2004 12:31 » 

Тогда нужно просто заливать данные по порядку возростания  значений...
Записан

Да да нет нет все остальное от лукавого.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #12 : 03-02-2004 12:31 » 

x77,  что в книге было, то и написал  Улыбаюсь
и я так думаю, если автоинкремент (увеличение), то и устанавливаться должно максимум
Записан

I Have Nine Lives You Have One Only
THINK!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #13 : 03-02-2004 12:42 » 

HandKot,  да почему максимум-то? минимум должен устанавливаться!
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #14 : 03-02-2004 12:48 » 

x77,  устанавливается значение с которого потом пойдет отсчет инкремента, а максимум это или минимум дело второстепенное  Отлично
Записан

I Have Nine Lives You Have One Only
THINK!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #15 : 03-02-2004 12:50 » 

HandKot, до сих пор это называлось минимумом Улыбаюсь а максимум - это максимальное значение, которого инкремент может достигать.
Записан

Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #16 : 03-02-2004 12:53 » 

HandKot, агромное спасибо - буду пробовать.
x77, для моей задачи - это не важно.
Записан

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

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

WWW
« Ответ #17 : 03-02-2004 16:25 » 

Какая версия MySQL ?

Подобный перенос массивных (относительно - ~300М) баз уже делал.
Главное - удалить auto_increment и PRIMARY KEY на нужном поле. Остальные ключи тоже лучше удалить - быстрее пойдет вставка. В версии 4.хх "остальные" ключи можно не удалять, а запрещать (ALTER TABLE table DISABLE KEYS). Все эти изменения не на исходных, а на целевых таблицах.

Далее перенос - как тебе удобнее. Напр.: INSERT db_new.table SELECT * db_old.table  - отсутствующие поля выставятся по умолчанию.

После вставки:
SELECT @a:=MAX(id)+1 FROM table; ALTER TABLE table MODIFY id INT ..... PRIMARY KEY AUTO_INCREMENT; ALTER TABLE table AUTO_INCREMENT=@a;
Это должно выполняться в _одной_ сессии.

Ну и ключи надо назад вернуть.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #18 : 04-02-2004 08:57 » 

Всем спасибо - все работает!
Записан

А птичку нашу прошу не обижать!!!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines