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

цифры это сколько символов или байтов взять с начала значения поля в индекс, такой не полный индекс,
если такого индекса хватает то можно сокращать, это съэкономить места на диске и ускорить INSERT операции.
Такие индексы обычно не медленнее, чем индексы полных значений полей.
Тут подробно
Для просмотра ссылки Войди или Зарегистрируйся
А в примере это создаётся уникальный индекс, тогда email лучше брать весь, а hash тоже наверное одинаковый может быть, например если это пароль, тогда лучше создать индекс полных значений этих полей, значит цифры указывать не надо. А вообще хватит и одного email для уникального индекса если это таблица какой нибудь регистрации юзеров
 
Еще появился вопрос. После 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.

Или по-другому перефразирую. Задача:
В случае инсерта в первую таблицу нужно во вторую таблицу тоже забить строчку. В случае Апдейта первой таблицы, ничего не забивать во вторую таблицу. Идеально, если одним запросом.
 
Одним запросом вряд ли получится.
 
Курите триггеры, в вашем случае BEFORE INSERT. Некоторые полезные для вас примеры можно подсмотреть здесь Для просмотра ссылки Войди или Зарегистрируйся
 
А если вот так попробовать:
Код:
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.
 
INSERT ... ON DUPLICATE KEY UPDATE полностью заработало на хостинге, на локальном денвере почему - то не пошло, хотя та же база данных. В принципе вопрос можно закрыть. Благодарю за помощь.
 
Назад
Сверху