Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« : 03-02-2004 08:33 » |
|
Проблема простая. Есть старая база сайта и есть новая база сайта,расширенная. Написать конвертор нет проблем. Проблема в том, что как в первой так и во второй базе для статей и др. материалов в таблице есть поле id - которое имеет свойство автоинкремент. Однако все старые ссылки на сайт ведут чаще всего на конкретные статьи и материалы. https://club.shelek.ru/viewart.php?id=100 говорит о том, что статья 100 по номеру. Если просто перебросить статьи то получится бардак, по описанию статьи о сокетах человек будет попадать на статью по оружию Как правильно записывать в нговую базу статьи - не только с сохранением старых ID но и для обеспечения продолжения списка уникальных номеров ID автоинкрементом. Дабы перенеся статьи и получив последний номер 150 при добавлении новой статьи ее номер пошел бы 151 и т.д. И так для всех таблиц.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #1 : 03-02-2004 08:55 » |
|
а нельзя в новой базе поле выставить как integer, писать as is, а потом переделать поле на autoincrement, поставив минимальное значение равное максимально записанному? на ib/mssql/oracle/etc я бы сделал такое свободно, а вот в mysql - увы, не помню
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #2 : 03-02-2004 09:33 » |
|
Так можно - но мне хочется автоматизировать - понятно, что можно выкрутится.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #3 : 03-02-2004 09:47 » |
|
если поддерживаются триггера, то можно увеличение поля прписать в триггере на вставку. если передаваемое значение рано NULL, то делаем автоинкремент, если не равно - то пишем то, что есть.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #4 : 03-02-2004 10:45 » |
|
x77, Как
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #5 : 03-02-2004 11:00 » |
|
у меня mysql нету я бы глянул. где его качнуть мона по фтп? пхп я настроил, наконец, у тебя в аське буря восторгов по этому поводу щас найду где майскл залить, и буит щастье.
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #6 : 03-02-2004 11:11 » |
|
В SQL Server я снимал с поля автоинкримент (идентити) заливал базу ставил автоинкримент .....
Но SQL Server позволяет в любой момент сделать поле автоинкриментным ...
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #7 : 03-02-2004 11:56 » |
|
в mysql не поддерживаются ни триггера, ни хранимые процедуры. ХП планировалось ввести в версии 5.0, о триггерах вообще речи нет. Короче, Гром, сделай руками и не мучайся. или скрипт пиши, который делает обновление а потом меняет тип поля на автоикремент.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #8 : 03-02-2004 11:58 » |
|
x77, качнуть mysql.org качай хоть для винды, хоть для никсов.
В общем понятно.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #9 : 03-02-2004 12:05 » |
|
Для версии 3.23
Поле AUTO_INCREMENT При добавлении новой записи с явно указанным значением в столбце произойдет одно из двух. Если запись с таким значением уже существует, возникает ошибочная ситуация, т.к. значения столбца должны быть уникальны. Если строка с таким значением отсутствует, новое значение станет новым максимумом последовательности
книга Поль Дюбуа "MySQL"
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 03-02-2004 12:20 » |
|
HandKot, максимумом??? а не минимумом?
|
|
|
Записан
|
|
|
|
PSD
Главный специалист
Offline
Пол:
|
|
« Ответ #11 : 03-02-2004 12:31 » |
|
Тогда нужно просто заливать данные по порядку возростания значений...
|
|
|
Записан
|
Да да нет нет все остальное от лукавого.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #12 : 03-02-2004 12:31 » |
|
x77, что в книге было, то и написал и я так думаю, если автоинкремент (увеличение), то и устанавливаться должно максимум
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #13 : 03-02-2004 12:42 » |
|
HandKot, да почему максимум-то? минимум должен устанавливаться!
|
|
|
Записан
|
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #14 : 03-02-2004 12:48 » |
|
x77, устанавливается значение с которого потом пойдет отсчет инкремента, а максимум это или минимум дело второстепенное
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #15 : 03-02-2004 12:50 » |
|
HandKot, до сих пор это называлось минимумом а максимум - это максимальное значение, которого инкремент может достигать.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #16 : 03-02-2004 12:53 » |
|
HandKot, агромное спасибо - буду пробовать. x77, для моей задачи - это не важно.
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #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; Это должно выполняться в _одной_ сессии.
Ну и ключи надо назад вернуть.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #18 : 04-02-2004 08:57 » |
|
Всем спасибо - все работает!
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
|