Как пересортировать 2 связанные по внешнему ключу таблицы?
Модератор: Модераторы
Как пересортировать 2 связанные по внешнему ключу таблицы?
Поясню: есть таблица s_regioni : id , nazv_reg , s_strani_id и таблица s_starani : id , nazv_strani. Поле s_strani_id ссылается на поле id таблицы s_strani. Мне необходимо отсортировать таблицу s_strani по названию страны в алфавитном порядке. Т.е. id России был например 143, а станет например 120. Соответственно в таблице регионов надо поменять id страны. Проблема в том, что таблиц довольно много у меня в БД. ID страны например есть еще в таблице адресов... Таких сортировок мне необходимо множество. Связанных таблиц в БД больше 200... Может есть какой инструмент для этого, что бы он учитывал внешние ключи? т.е. мне надо поменять id в одной таблице, и на основании допустим внешнего ключа также автоматом поменялись ссылающиеся на этот id другие поляв других таблицах.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Если я правильно понял - то это должен уметь делать любой приличный SQL сервер сам.
Просто укажи в ограничении внешнего ключа автообновление ключа - и всё.
Пример:
В подчинённой таблице проводок внешний ключ на документ. При изменении влюча в документе - в проводке тоже изменится.
Просто укажи в ограничении внешнего ключа автообновление ключа - и всё.
Пример:
Код: Выделить всё
ALTER TABLE TB_PROV
ADD CONSTRAINT FK_TB_PROV FOREIGN KEY (TB_DOC_ID) REFERENCES TB_DOC (TB_DOC_ID)
ON DELETE CASCADE ON UPDATE CASCADE
В подчинённой таблице проводок внешний ключ на документ. При изменении влюча в документе - в проводке тоже изменится.
Спасибо! Сам же читал про это недавно....
Но вопрос теперь возник другой:
Есть таблица в MySQL:
Пытаюсь проверить. В этой таблице есть запись с s_strani_id=143 - под таким кодом в справочнике государств (s_strani) у меня значится Россия. Пытаюсь поменять в этом справочнике id России на другое число (ну допустим 800), на что dbForge Studio выдает:
Видимо не дочитался я все таки чего-то. Что-то наверное путаю.
Но вопрос теперь возник другой:
Есть таблица в MySQL:
Код: Выделить всё
CREATE TABLE blanki.lica(
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
fam VARCHAR(30) NOT NULL,
imya VARCHAR(30) NOT NULL,
otch VARCHAR(30) DEFAULT NULL,
dr DATE NOT NULL,
s_pol_id TINYINT(4) UNSIGNED NOT NULL,
mr VARCHAR(255) NOT NULL,
s_reg_roj_id SMALLINT(6) UNSIGNED DEFAULT NULL,
nas_punkti_id INT(11) UNSIGNED DEFAULT NULL COMMENT 'Населенный пункт рождения',
s_strani_id SMALLINT(6) UNSIGNED NOT NULL COMMENT 'Гражданство',
s_nacii_id SMALLINT(6) UNSIGNED DEFAULT NULL,
inn BIGINT(20) UNSIGNED DEFAULT NULL,
s_obrazovanii_id TINYINT(4) UNSIGNED DEFAULT NULL,
d_smerti DATE DEFAULT NULL,
when_vvod DATETIME NOT NULL,
when_izm DATETIME NOT NULL,
who_vvod INT(11) UNSIGNED NOT NULL,
who_izm INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX dr (dr),
UNIQUE INDEX fam (fam),
INDEX FK_lica_nas_punkti_id (nas_punkti_id),
INDEX FK_lica_s_nacii_id (s_nacii_id),
INDEX FK_lica_s_obrazovanii_id (s_obrazovanii_id),
INDEX FK_lica_s_pol_id (s_pol_id),
INDEX FK_lica_s_reg_roj_id (s_reg_roj_id),
INDEX FK_lica_s_strani_id (s_strani_id),
UNIQUE INDEX imya (imya),
UNIQUE INDEX mr (mr),
UNIQUE INDEX otch (otch),
CONSTRAINT FK_lica_nas_punkti_id FOREIGN KEY (nas_punkti_id)
REFERENCES blanki.nas_punkti (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_lica_s_nacii_id FOREIGN KEY (s_nacii_id)
REFERENCES blanki.s_nacii (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_lica_s_obrazovanii_id FOREIGN KEY (s_obrazovanii_id)
REFERENCES blanki.s_obrazovanii (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_lica_s_pol_id FOREIGN KEY (s_pol_id)
REFERENCES blanki.s_pol (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_lica_s_reg_roj_id FOREIGN KEY (s_reg_roj_id)
REFERENCES blanki.s_reg_roj (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_lica_s_strani_id FOREIGN KEY (s_strani_id)
REFERENCES blanki.s_strani (id) ON DELETE CASCADE ON UPDATE CASCADE
)
ENGINE = INNODB
AUTO_INCREMENT = 1
CHARACTER SET utf8
COLLATE utf8_general_ci;Пытаюсь проверить. В этой таблице есть запись с s_strani_id=143 - под таким кодом в справочнике государств (s_strani) у меня значится Россия. Пытаюсь поменять в этом справочнике id России на другое число (ну допустим 800), на что dbForge Studio выдает:
Видимо не дочитался я все таки чего-то. Что-то наверное путаю.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо за подсказку! У меня еще есть таблица регионов, а вот там тоже был внешний ключ на id страны с restrict.
Делал диаграмму БД в dbForge Studio, так вот в диаграме при просмотре внешнего ключа стояло CASCADE, вот я и думал что все в порядке, а когда открыл саму таблицу на редактирование там было restrict. Исправил, и все заработало! Еще раз спасибо! А то бы долго ковырялся в диаграмме...
Делал диаграмму БД в dbForge Studio, так вот в диаграме при просмотре внешнего ключа стояло CASCADE, вот я и думал что все в порядке, а когда открыл саму таблицу на редактирование там было restrict. Исправил, и все заработало! Еще раз спасибо! А то бы долго ковырялся в диаграмме...
