2013-11-14 4 views
0

В базе данных mysql есть academy и instructors. Я хочу, чтобы вставить значения в каждой таблице в следующем порядке (псевдо-код):Вставка значений на основе результатов другой вставки

  • первый INSERT INTO academy значений acad_name, address, street, city, state
  • второй INSERT INTO instructors значений instructor_name
  • третьего INSERT INTO academy значений instructor_id ОТ instructors \ эти записи должны совпадать с соответствующими данными academy_id

Третья вставка основана на результатах второй вставки instructor_id, которая является auto_increment. Но я хочу, чтобы третья вставка соответствовала текущей академии значениям, которые были добавлены ранее, как я могу это сделать?

CREATE TABLE IF NOT EXISTS `academy` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(25) NOT NULL, 
    `academy_id` int(11) NOT NULL, 
    `instructor_id` int(11) DEFAULT NULL, 
    `street_address` varchar(50) NOT NULL, 
    `city` varchar(25) NOT NULL, 
    `state` varchar(25) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `instructor_id` (`instructor_id`) // Foreign KEY 
); 

CREATE TABLE IF NOT EXISTS `instructors` (
    `instructor_id` int(11) NOT NULL AUTO_INCREMENT, 
    `academy_id` int(11) NOT NULL 
    PRIMARY KEY (`instructor_id`), 
    KEY `academy_id` (`academy_id`) // Foreign KEY 
); 
+0

3rd one на самом деле обновляет запись, вставленную в 1-й? – Damodaran

+0

ваш дизайн стола имеет круговой FK! academy_id Иностранный КЛЮЧ в инструкторах и инструктор_ид - это Иностранный КЛЮЧ в таблице академии. – Damodaran

+0

Причина @Damodaran для другого вопроса, заданного ранее, [Stackoverflow] (http://stackoverflow.com/questions/19959164/display-values-from-several-tables-that-share-one-foreign-key/19960089?noredirect = 1 # comment29710299_19960089) –

ответ

1

Ваша структура таблицы немного сбивает с толку. Почему у вас есть поле с расширением «id» в академии, когда у вас есть поле «academy_id», которое (я полагаю) будет уникальным, используйте «academy_id» в качестве первичного ключа.

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

Если сценарий подразумевает, что должно существовать отношение «многие ко многим», вы должны создать объект пересечения. Это означает, что если в академии есть много инструкторов, и у инструктора может быть много академий, тогда вы создадите новую таблицу с двумя ограничениями внешнего ключа от академической школы и инструктора с уникальным полем идентификатора, а также для новой таблицы.

1

Вы можете использовать функцию id id для извлечения идентификатора таблицы академии и добавления в другую таблицу вставки.

MySQLi

mysqli_insert_id(); 

MySQL

mysql_insert_id(); 
0

Сначала вставьте запись в таблице академии, а затем в таблице инструкторов. Затем используйте

mysql_insert_id

получить последний вставленный идентификатор и обновить запись в таблице академии. Check this question

0

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

SELECT @insert_id:=`AUTO_INCREMENT` 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'YourDatabaseName' 
AND TABLE_NAME = 'YourTableName'; 
) 

или

INSERT INTO `academy`(`id`) VALUES (NULL); 
SET @last_insert_id = LAST_INSERT_ID(); 

набор, который в определенных пользователем переменной и затем использовать его на последовательных вставок.

Однако, если имеются многопараметрические вставки, вы также должны использовать таблицы блокировки, чтобы использовать правильные значения идентификатора автоинкремента.

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

Смежные вопросы