The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Mysql 4.0 Условие: update или insert, !*! Васька, 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 запроса или есть более простые способы?

  • Mysql 4.0 Условие: update или insert, !*! Romik, 09:45 , 30-Окт-06 (1)
    >Требуется проверить существует ли запись. Если ее нету то добавить запись с
    >толькочто поступившими данными, если запись есть, то прибавить в ней значение.
    >
    >Пример:
    >// 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

  • Mysql 4.0 Условие: update или insert, !*! Richi, 12:29 , 30-Окт-06 (3)
    >Требуется проверить существует ли запись. Если ее нету то добавить запись с
    >толькочто поступившими данными, если запись есть, то прибавить в ней значение.
    >
    >Пример:
    >// 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.

    • Mysql 4.0 Условие: update или insert, !*! Васька, 12:51 , 30-Окт-06 (4)

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

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

      • Mysql 4.0 Условие: update или insert, !*! Dreid, 15:34 , 02-Ноя-06 (5)
        >Насколько я понял 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

        • Mysql 4.0 Условие: update или insert, !*! Dreid, 19:05 , 02-Ноя-06 (6)
          Дополнение:
          Cамо сабой, поле по которому мы ищем дубликат должно быть UNIQUE (ну или PRIMARY) KEY.
          • Mysql 4.0 Условие: update или insert, !*! Васька, 14:49 , 03-Ноя-06 (7)
            >Дополнение:
            >Cамо сабой, поле по которому мы ищем дубликат должно быть UNIQUE (ну
            >или PRIMARY) KEY.

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

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

            • Mysql 4.0 Условие: update или insert, !*! elvenic, 18:35 , 03-Ноя-06 (8)
              >>Дополнение:
              >>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)
                  )
                





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

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