SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.09.2012 02:45:55

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

UPDATE сразу нескольких таблиц

Нужно было сделать 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;


Скажи миру - НЯ!

Неактивен

 

#2 17.09.2012 05:10:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: UPDATE сразу нескольких таблиц

animegirl написал:

Нужно было сделать UPDATE сразу нескольких таблиц, и пока писала код проверить работает ли синтаксис, нечайно рановато нажала отослать, и удивилась, что код сработал

UPDATE user_profile,user_interest SET user_profile.interests_access=2,user_interest.interest_access=2 WHERE user_profile.uid=97

Совершенно не понятно как, но были изменены 2 строчки, по одной в каждой из таблиц.

Понятно как: в таблице user_interest у вас была всего одна строка, а в таблице user_profile одна строка удовлетворяла условию user_profile.uid=97.

animegirl написал:

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

Второй вариант.

Неактивен

 

#3 17.09.2012 10:56:49

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: UPDATE сразу нескольких таблиц

Понятно как: в таблице user_interest у вас была всего одна строка, а в таблице user_profile одна строка удовлетворяла условию user_profile.uid=97.

А я уж было поверила в телепатию MySQL´а


Скажи миру - НЯ!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson