#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. Вам придется использовать отдельные вставки для отдельных таблиц. Оберните их в транзакцию, чтобы сделать их атомарными. Я предполагаю, что у вас есть некоторые базовые знания о запросах. Если нет, поищите какие-нибудь учебные пособия.