Как после INSERT’а в таблицу с полем auto_increment получить значение этого поля?

Часто при работе с таблицами, в которых есть поле с атрибутом auto_increment, нужно получать значение этого поля после очередного INSERT'а. Зачастую это делают в два приема: INSERT, а затем - SELECT с заданными параметрами. Это - неправильно.

В MySQL есть встроенные средства для получения этих данных. Многие языки программирования умеют с этими средствами работать.

Например, в PHP есть функция mysql_insert_id(). Она возвращает значение поля auto_increment после последнего INSERT'а в том соединении, на который ссылается переданный функции указатель. Если никакие параметры не указаны, используется последнее открытое соединение.

В Perl'е аналогичная функциональность есть в модуле DBD::mysql:

$insertid = $dbh->{'mysql_insertid'};

© Хостинг "Зенон Н.С.П.", "Как после INSERT'а в таблицу с полем auto_increment получить значение этого поля?"

Как в MySQL при наличии некоторых данных изменить их, а при отсутствии - добавить?

Зачастую возникают ситуации, когда нужно при наличии определенной строки в таблице в MySQL изменить ее, а при ее отсутствии - добавить. Обычно решают такую задачу в два приема: сначала проверяют, есть ли данные (SELECT с нужными условиями), а затем в зависимости от полученного результата либо изменяют их (UPDATE), либо добавляют (INSERT).

Конструкция получается достаточно трудоемкая.

В некоторых случаях бывает эффективнее использовать команду MySQL REPLACE. По синтаксису она эквивалентна INSERT.

Логика работы REPLACE такова: если в существующей строке есть поле, для которого построен индекс типа PRIMARY KEY или UNIQUE, с тем же значением, что и в новой строке, то старая строка удаляется, а новая - добавляется. Если строки с таким значением в указанном поле нет, то строка просто добавляется.

© Хостинг "Зенон Н.С.П.", "Как в MySQL при наличии некоторых данных изменить их, а при отсутствии - добавить?"