The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Mysql 4.0 Условие: update или insert"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Mysql 4.0 Условие: update или insert"  
Сообщение от Васька (??) on 30-Окт-06, 07:05 
Требуется проверить существует ли запись. Если ее нету то добавить запись с толькочто поступившими данными, если запись есть, то прибавить в ней значение.
Пример:
// n = 15
// проверить существует ли запись
select * from t where hour=12;

// если записи нет то:
insert into t (n,hour) values (15,12);

// если запись есть
update t set n=n+15 where hour=12;

Обезательно выполнять такую операцию в 2 запроса или есть более простые способы?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Mysql 4.0 Условие: update или insert"  
Сообщение от Romik (??) on 30-Окт-06, 09:45 
>Требуется проверить существует ли запись. Если ее нету то добавить запись с
>толькочто поступившими данными, если запись есть, то прибавить в ней значение.
>
>Пример:
>// n = 15
>// проверить существует ли запись
>select * from t where hour=12;
>
>// если записи нет то:
>insert into t (n,hour) values (15,12);
>
>// если запись есть
>update t set n=n+15 where hour=12;
>
>Обезательно выполнять такую операцию в 2 запроса или есть более простые способы?
>


использузйте оператор CASE

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Mysql 4.0 Условие: update или insert"  
Сообщение от Васька (??) on 30-Окт-06, 11:46 
>
>
>использузйте оператор CASE


хм.. а можно какойнибуть пример?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Mysql 4.0 Условие: update или insert"  
Сообщение от Richi (??) on 30-Окт-06, 12:29 
>Требуется проверить существует ли запись. Если ее нету то добавить запись с
>толькочто поступившими данными, если запись есть, то прибавить в ней значение.
>
>Пример:
>// n = 15
>// проверить существует ли запись
>select * from t where hour=12;
>
>// если записи нет то:
>insert into t (n,hour) values (15,12);
>
>// если запись есть
>update t set n=n+15 where hour=12;
>
>Обезательно выполнять такую операцию в 2 запроса или есть более простые способы?
>

В MySQL есть оператор REPLACE. Если записи нет, то делает INSERT, если есть, то делает UPDATE.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Mysql 4.0 Условие: update или insert"  
Сообщение от Васька (??) on 30-Окт-06, 12:51 

>
>В MySQL есть оператор REPLACE. Если записи нет, то делает INSERT, если
>есть, то делает UPDATE.

Насколько я понял REPLACE не делает update, она просто заменяет. REPLACE не предоставляет доступа к замещаемой записи, значит все равно придется сделать в начале select чтобы получить значение n, затем суммировать его и потом записать. Т.е. в REPLACE запись n=n+15 не прокатит.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Mysql 4.0 Условие: update или insert"  
Сообщение от Dreid on 02-Ноя-06, 15:34 
>Насколько я понял REPLACE не делает update, она просто заменяет. REPLACE не
>предоставляет доступа к замещаемой записи, значит все равно придется сделать в
>начале select чтобы получить значение n, затем суммировать его и потом
>записать. Т.е. в REPLACE запись n=n+15 не прокатит.

А вот такое?

(Взято из http://mysql.org/doc/refman/4.1/en/insert-on-duplicate.html)

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

Там документация не разделяет 4.0 и 4.1, так что я не могу сказать, есть ли это в 4.0

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Mysql 4.0 Условие: update или insert"  
Сообщение от Dreid (ok) on 02-Ноя-06, 19:05 
Дополнение:
Cамо сабой, поле по которому мы ищем дубликат должно быть UNIQUE (ну или PRIMARY) KEY.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Mysql 4.0 Условие: update или insert"  
Сообщение от Васька (??) on 03-Ноя-06, 14:49 
>Дополнение:
>Cамо сабой, поле по которому мы ищем дубликат должно быть UNIQUE (ну
>или PRIMARY) KEY.

Вот это то что нужно, спасибо :)

Есть только одна не большая проблемка:
Уникальных столбцев нет, но уникальность есть в совокупности нескольких столбцев, например - year, month, day, hour. Думаю добавить в таблицу еще один столбец UNIQUE, который будет содержать стороку типа "year-month-day-hour" он и будет уникальным.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Mysql 4.0 Условие: update или insert"  
Сообщение от elvenic email(??) on 03-Ноя-06, 18:35 
>>Дополнение:
>>Cамо сабой, поле по которому мы ищем дубликат должно быть UNIQUE (ну
>>или PRIMARY) KEY.
>
>Вот это то что нужно, спасибо :)
>
>Есть только одна не большая проблемка:
>Уникальных столбцев нет, но уникальность есть в совокупности нескольких столбцев, например -
>year, month, day, hour. Думаю добавить в таблицу еще один столбец
>UNIQUE, который будет содержать стороку типа "year-month-day-hour" он и будет уникальным.

Да нет, не надо так делать. Надо создать primary key (или unique) по всем этим полям:

    create table T (
        year integer,
        month integer,
        day inteer,
        hour integer,
        ...
        primary key (year, month, day, hour)
    )
  


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру