[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить запрос
z3rg
Помогите пожалуйста составить запрос

если имя (name) в табице (tab) не существует, то добавить

делаю такой запрос
SQL
IF EXISTS (SELECT * FROM `tab` WHERE name = "123")

END

ELSE

BEGIN INSERT INTO `tab` (name) VALUES ("123")

END


выводит ошибку

SQL
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS ... INSERT' at line 1




Спустя 23 минуты, 43 секунды (15.09.2009 - 18:02) kirik написал(а):
z3rg
тут не нужны никакие IF-ы.. Просто делаешь поле name уникальным ключем, тогда просто делаешь INSERT и если запись не существовала то вставится, а если существовала, то не вставится smile.gif
Еще обрати внимание на такую штуку как INSERT ... ON DUPLICATE KEY UPDATE ....

Спустя 5 минут, 19 секунд (15.09.2009 - 18:08) Michael написал(а):
Цитата
INSERT ... ON DUPLICATE KEY UPDATE ....

по смыслу похоже на REPLACE.
z3rg, а ты что хранимую процедуру пишешь, что такой синтаксис?

Спустя 20 минут, 22 секунды (15.09.2009 - 18:28) kirik написал(а):
Цитата (Michael @ 15.09.2009 - 10:08)
о смыслу похоже на REPLACE

угу, ты прав smile.gif
Цитата (http://dev.mysql.com/doc/refman/5.0/en/replace.html)
REPLACE is a MySQL extension to the SQL standard. It either inserts, or deletes  and inserts. For another MySQL extension to standard SQL — that either inserts or updates — see Section 12.2.5.3, “INSERT ... ON DUPLICATE KEY UPDATE Syntax”.


Спустя 1 час, 7 минут, 48 секунд (15.09.2009 - 19:36) z3rg написал(а):
Спасибо.

Цитата
тут не нужны никакие IF-ы.. Просто делаешь поле name уникальным ключем, тогда просто делаешь INSERT и если запись не существовала то вставится, а если существовала, то не вставится


kirik вроде ошибку будет выдавать если поставить первичный ключ

Цитата
z3rg, а ты что хранимую процедуру пишешь, что такой синтаксис?

Michael, не просто хочу чтоб если существует то не добавляло, делать 2 запроса не хочеся, вот и извращаюсь.

Спустя 35 минут, 49 секунд (15.09.2009 - 20:12) kirik написал(а):
Цитата (z3rg @ 15.09.2009 - 11:36)
kirik вроде ошибку будет выдавать если поставить первичный ключ

Ага.. INSERT ... ON DUPLICATE KEY UPDATE ... или REPLACE или в два запроса (первым выбираешь, вторым вставляешь).

Спустя 11 часов, 42 минуты, 34 секунды (16.09.2009 - 07:54) Michael написал(а):
Если поле name подразумевает наличие повторяющихся значений, тогда конечно никакого индексирования и REPLACE не подойдет.
Выбери одним запросом COUNT(name), проверь, а вторым уже дальше. Все так делают и не перерабатывают smile.gif .
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.