Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > UPDATE сразу нескольких таблиц


Автор: animegirl 12.9.2012, 01:48
Нужно было сделать UPDATE сразу нескольких таблиц, и пока писала код проверить работает ли синтаксис, нечайно рановато нажала отослать, и удивилась, что код сработал
Код
UPDATE user_profile,user_interest SET user_profile.interests_access=2,user_interest.interest_access=2 WHERE user_profile.uid=97

Совершенно не понятно как, но были изменены 2 строчки, по одной в каждой из таблиц. Меня это сильно удивило, я ведь не прописала точку их соприкосновения, то есть, что-то вроде так
Код
UPDATE user_profile,user_interest SET user_profile.interests_access=4,user_interest.interest_access=4 WHERE user_profile.uid=97 AND user_interest.uid=user_profile.uid

Работают оба варианта, так же работает вариант номер 3
Код
UPDATE user_profile,user_interest SET user_profile.interests_access=3,user_interest.interest_access=3 WHERE user_profile.uid=97 AND user_interest.uid=97

Теперь вопрос: А как вообще правильно? Чтоб и синтаксис не нарушать и быстро работало.

Таблицы простые:
Код
CREATE TABLE IF NOT EXISTS `user_profile` (
  `uid` int(10) unsigned NOT NULL,
  `interests_ids` varchar(2047) COLLATE utf8_unicode_ci DEFAULT NULL,
  `interests_access` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `user_interest` (
  `uid` int(10) unsigned NOT NULL,
  `interest_id` bigint(20) unsigned NOT NULL,
  `interest_access` tinyint(3) unsigned NOT NULL,
  KEY `uid` (`uid`),
  KEY `interest_id` (`interest_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Автор: Akina 12.9.2012, 08:02
Цитата(animegirl @  12.9.2012,  02:48 Найти цитируемый пост)
Совершенно не понятно как, но были изменены 2 строчки, по одной в каждой из таблиц. Меня это сильно удивило, я ведь не прописала точку их соприкосновения

Вероятно, сработал natural join. Попробуйте изменить имя поля связывания в одной из таблиц...

Автор: animegirl 12.9.2012, 08:18
Тогда ошибка, но всё равно вопрос отпадает, так как связывание в join´ах надо прописывать

Автор: Akina 12.9.2012, 09:25
Цитата(animegirl @  12.9.2012,  09:18 Найти цитируемый пост)
Тогда ошибка

Да. Natural join не может найти соотв. поля - и получается ошибка синтаксиса.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)