2010-05-16 1 views
2

У меня есть 2 таблицы, каждый из которых использует первичный ключ другого в качестве внешнего ключа. Первичные ключи для обоих установлены на auto_increment.Проблема с первичным ключом автоматического прироста (MySQL)

Проблема в том, что когда я пытаюсь создать и войти в одну из таблиц, я понятия не имею, что такое первичный ключ записи, и не может понять, что положить в другую таблицу в качестве внешнего ключа , Что мне делать? Я вообще отбрасываю auto_increment и готовлю уникальный идентификатор для каждой записи, чтобы я мог использовать его для адресации созданных записей? Я использую PHP, если это актуально. Благодарю.

ответ

4

Каждая основная база данных обеспечивает средство поиска идентификатора только что вставленной записи; идея автоинкрементных идентификаторов не была бы очень полезной в противном случае.

В MySQL вы можете использовать mysql_insert_id(). См. PHP function of the same name или MySQL function, который он обертывает.

+0

Но не было бы проблемой, если в течение очень короткого периода времени было сделано много вставок? Затем он отправит идентификатор другой записи? Благодарю. – mathon12

+0

Если вы вставляете две записи и одну ссылку на другую, вы должны убедиться, что они вставлены сразу после друг друга или запишите 'mysql_insert_id()' для первой записи и сохраните ее, если вы не можете вставить вторую запись сразу. – meagar

+0

@ mathon12 nope. –

0

Вы можете использовать эту функцию: mysql_insert_id для того, чтобы получить последний идентификатор вставленной

+0

Спасибо, что должен это сделать. – mathon12

0

После начальной вставки, функция mysql_insert_id() возвращает значение autoincremented идентификатор, так что вы можете использовать его в следующей вставке

+0

Спасибо. Я посмотрю на это :) – mathon12

1

mysql_insert_id может дать вам значение последнего сгенерированного значения первичного ключа автоинкремента.

Если вы используете PDO (что вам нужно), вместо этого вы можете использовать PDO::lastInsertId(). Это будет работать для всех систем баз данных, поддерживаемых PDO.

+0

Никогда не использовал PDO раньше. Интересно, что PostgreSQL имеет ключевое слово RETURNING, которое довольно удобно. – mathon12