Автоинкрементная проблема mysql - PullRequest
0 голосов
/ 31 октября 2010

Я искал это, но пока не повезло.У меня есть две таблицы в MySQL, они настроены как parent-child.В родительской таблице есть поле типа auto_increment, а у дочернего - поле, которое ссылается на столбец автоинкремента в родительском элементе.Когда я делаю вставки в родительскую таблицу, все идет хорошо.Но когда я делаю вставку в дочернюю таблицу, это дает мне исключение, которое говорит, что в родительской таблице нет значения ссылочного столбца.Вопрос в том, как мне обновить значение идентификатора автоинкремента ПОСЛЕ ВСТАВКИ, чтобы дочерний элемент имел ссылку на него ДО выполнения его ОБНОВЛЕНИЯ (или вставки в этом случае).

Ответы [ 3 ]

1 голос
/ 31 октября 2010

при вставке новой записи всегда сначала вставляйте в родительский. Получите значение auto_increment (используйте LAST_INSERT_ID () в mysql) и используйте его в дочерней таблице. В самом начале вы можете начать транскрипцию, поэтому, если что-то не так при вставке в child, вы можете откатиться назад.

0 голосов
/ 09 декабря 2010

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

0 голосов
/ 31 октября 2010

Ваш вопрос немного неясен, но я предполагаю, что у вас есть ограничение внешнего ключа для столбца в дочерней таблице, который ссылается на поле auto_increment в родительской таблице, верно?

В этом случае вам необходимо установить допустимое значение в столбце FK дочерней таблицы для каждого обновления или вставки в дочернюю таблицу. Вы все еще получаете ошибку, если делаете это?

Вопрос в том, как мне обновить значение идентификатора автоинкремента ПОСЛЕ ВСТАВКА, чтобы ребенок имел ссылка на это ДО выполнения его ОБНОВЛЕНИЕ (или вставьте в этом случае).

Это не имеет смысла для меня. Что вы подразумеваете под обновить значение идентификатора автоинкремента ?

Обычно после вставки в родительскую таблицу вы получаете сгенерированное значение auto_increment (как это сделать зависит от используемого вами API, но все API-интерфейсы базы данных могут сделать это), установите это значение для соответствующего столбца в дочерней таблице , затем вставьте / обновите дочернюю таблицу.

...