Вставить запрос для таблиц с подключенным внешним ключом in

#mysql #sql

#mysql #sql

Вопрос:

Предположим, у меня есть следующие две таблицы со связанным адресом внешнего ключа. Предположим, что у человека может быть другой адрес. Таким образом, структура таблицы выглядит следующим образом, где, например, person aa имеет два адреса.

таблица A

 id name age adress
-------------------
1  aa   bb  10
2  xx   cc  11 
  

таблица B

 id adress lane1 lane2 lane3 
----------------------------
1  10     l2    l2    l3
2  10     v1    v2    v3
  

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

Комментарии:

1. Я думаю, вы имеете в виду «обновление». Мне не ясно, какие проблемы могут возникнуть при вставке в любую таблицу.

2. Вы спрашиваете, какие запросы понадобятся для заполнения каждой из этих таблиц?

3. ну, OMG и Thomas, мне нужно вставить данные в одно и то же время для обеих таблиц, используя запрос insert

4. Что именно вы подразумеваете под «одновременно»? Означает ли это, что у вас есть пользователь, и вы хотите заполнить его данные в таблице A и их адреса в таблице B?

5. да, Томас.. ну, я думаю, я должен использовать два запроса insert knw .. не могу использовать для этого один запрос

Ответ №1:

Когда у вас есть циклические внешние ключи, вам нужно то, что PostgreSQL вызывает отложенные ограничения, не знаю, есть ли они у mysql. Но это также признак плохого дизайна схемы.

Лучшая структура была бы:

 table person

id name age

1  aa   bb
2  xx   cc

table address

id person lane1 lane2 lane3 
1  1     l2    l2    l3
2  1     v1    v2    v3
  

Тогда вам понадобится только один внешний ключ, и вставки не должны доставлять вам никаких проблем.

Комментарии:

1. спасибо Элке .. если я изменю структуру на приведенную выше, как должна выглядеть инструкция sql insert?

2. Вам придется использовать отдельные вставки для отдельных таблиц. Оберните их в транзакцию, чтобы сделать их атомарными. Я предполагаю, что у вас есть некоторые базовые знания о запросах. Если нет, поищите какие-нибудь учебные пособия.