Вставка MySQL в несколько таблиц: нормализация базы данных
Вставка данных в несколько таблиц одновременно в MySQL напрямую не поддерживается. Однако существуют альтернативные подходы для достижения этой функциональности.
Использование транзакций
Чтобы обеспечить согласованность данных в таблицах, рекомендуется использовать транзакции. Транзакции инкапсулируют серию запросов как единое целое, гарантируя, что все запросы либо успешны, либо неуспешны вместе.
Вот пример использования транзакций:
BEGIN; INSERT INTO users (username, password) VALUES('test', 'test'); INSERT INTO profiles (userid, bio, homepage) VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com'); COMMIT;
Получение значения автоприращения
Чтобы вставить идентификатор автоприращения из таблицы пользователей в таблицу профилей, вы можете использовать функцию LAST_INSERT_ID() . Однако если последующий оператор вставки вставляет в таблицу с собственным столбцом автоинкремента, значение LAST_INSERT_ID() будет обновлено до значения этой таблицы.
Чтобы сохранить исходное значение LAST_INSERT_ID(), вы можете сохранить это в пользовательской переменной внутри транзакции.
Использование MySQL Переменные:
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...);
Использование языковых переменных:
// PHP example $mysqli->query("INSERT INTO table1 ..."); $userid = $mysqli->insert_id; $mysqli->query("INSERT INTO table2 ($userid, ...)");
Внимание
При вставке в базу данных важно учитывать согласованность базы данных. несколько таблиц. В случае прерывания транзакции гарантируют, что все запросы либо будут выполнены полностью, либо не будут выполнены вообще. Без транзакций частичные вставки могут привести к несогласованности.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3