Будет ли этот SQL-код обновляться правильно? - PullRequest
1 голос
/ 13 ноября 2010

Я хочу обновить только одно поле в таблице MySQL.

У меня есть "ad_id", который уникален.

Поле "mod_date" является полем TIMESTAMPS, которое являетсяодин, который мне нужно обновить.

UPDATE main_table
SET main_table.mod_date = NOW()
WHERE classified.ad_id = $ad_id";

Я еще не проверял это, потому что боюсь, что это может обновить все строки.

Итак, у меня есть два вопроса:

Есть ли способ предотвратить обновление MySql более чем на 1 строку?

Правильно ли использовать этот SQL-код для обновления только одной строки?

Спасибо

Ответы [ 3 ]

2 голосов
/ 13 ноября 2010

Ваш запрос не выглядит так, как будто он будет работать так, потому что он проверяет поле ad_id в таблице classified, которое не было определено в операторе. Если это только частичный запрос и вы присоединяетесь к таблице classified где-то в запросе, здесь недостаточно информации, чтобы указать, сколько строк будет изменено.

Вы можете добавить LIMIT 1 в конец запроса, чтобы он обновлял только первую строку, найденную запросом, но если вы не уверены, что запрос выполняет, первая строка может быть не той, которую вы хотите изменить .

В качестве примечания я должен сказать, что если вы боитесь попробовать посмотреть, что делает запрос, это означает, что либо у вас нет резервной копии базы данных, либо вы работаете напрямую с производством базы данных, и оба эти варианта звучат довольно страшно.

2 голосов
/ 13 ноября 2010

Если ad_id уникален, он будет обновлять только одну строку (если $ ad_id действителен, в противном случае ноль).

Если вас беспокоит такое обновление, перепишите его в качестве выбора, чтобы подтвердить, какие строки онобудет работать до запуска.

0 голосов
/ 13 ноября 2010

Какая связь между main_table и classified?

Например ...

UPDATE header h
   INNER JOIN detail d ON d.id_header = h.id_header
SET h.name = 'New name'
WHERE d.id_detail = 10

обновит name в таблице header для конкретного id_detail.

В вашем случае, если ad_id уникален, вы можете быть уверены, что MySQL обновит только одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...