1. Начата процедура восстановления социальных групп. Лидерам старых и новых групп обязательно ознакомиться с регламентом проведения работ.

Mysql как упростить? есть строка, тогда update, нет - insert

Тема в разделе 'Базы данных', создана пользователем dandandan, 6 янв 2012.

  1. цифры это сколько символов или байтов взять с начала значения поля в индекс, такой не полный индекс,
    если такого индекса хватает то можно сокращать, это съэкономить места на диске и ускорить INSERT операции.
    Такие индексы обычно не медленнее, чем индексы полных значений полей.
    Тут подробно
    http://dev.mysql.com/doc/refman/5.0/en/create-index.html
    А в примере это создаётся уникальный индекс, тогда email лучше брать весь, а hash тоже наверное одинаковый может быть, например если это пароль, тогда лучше создать индекс полных значений этих полей, значит цифры указывать не надо. А вообще хватит и одного email для уникального индекса если это таблица какой нибудь регистрации юзеров
    dandandan нравится это.
  2. Еще появился вопрос. После INSERT ... ON DUPLICATE KEY UPDATE делаю:
    PHP:

    if ( $user_id=mysql_insert_id($link) ){
    echo 
    'id строки';
    }
    Получается, что mysql_insert_id получает данные поля всегда и при инсерте и апдейте, хотя в доках написано, что
    mysql_insert_id — Возвращает идентификатор, сгенерированный при последнем INSERT-запросе. В случае перехода на update, вроде бы операция инсерт не производится.

    Еще заметил особенность, что при инсерте возвращается правильный id строки, а при апдейте - номер строки + 1.

    Или по-другому перефразирую. Задача:
    В случае инсерта в первую таблицу нужно во вторую таблицу тоже забить строчку. В случае Апдейта первой таблицы, ничего не забивать во вторую таблицу. Идеально, если одним запросом.
  3. Одним запросом вряд ли получится.
  4. Курите триггеры, в вашем случае BEFORE INSERT. Некоторые полезные для вас примеры можно подсмотреть здесь http://habrahabr.ru/blogs/mysql/37693/
  5. А если вот так попробовать:
    Код:
    my $update = $dbh->prepare('UPDATE mytable SET price=? where id=?');
    my $insert = $dbh->prepare('INSERT INTO mytable (price, id) values (?, ?)');
    .......
    my $row = $update->execute($price, $id);
    if ($row==0)
    {
      $insert->execute($price, $id);
    }
    Т.е. сначала делаем запрос UPDATE и если он вернул нулевой результат, то делаем INSERT.
  6. INSERT ... ON DUPLICATE KEY UPDATE полностью заработало на хостинге, на локальном денвере почему - то не пошло, хотя та же база данных. В принципе вопрос можно закрыть. Благодарю за помощь.