Хотел бы поинтересоваться, как добавлять данные в связанные таблицы одним запросом. На рисунке изображена схема БД. Как добавить автора и книгу так, чтобы их ИД добавилось в центральную таблицу? БД на MySQL.
1 запросом никак не выйдет.
Сначала делаете вставку в authors и books, а потом в book_authors.
Т.е получается 3 запроса.
А если у вас authors и books имеют ID, которые генерируются(Identity), то вам их понадобится получить, а это еще +2 запроса.
Конечно, можно сделать какие-нибудь хитрые триггеры для заполнения центральной таблицы, но это по моему уже извращение+ вы просто скрываете дополнительные запросы, которые на самом деле есть.
Это я пишу по опыту использования MS SQL, так как не указана конкретная СУБД, но в других СУБД я такого не встречал.
Да, если говорить в разрезе ORM под СУБД, например Entity Framework, то он автоматически заполняет центральную таблицу, но он все равно за "кулисами" вызывает запрос на вставку.
Вы не указали СУБД! В PostgreSQL, благодаря нестандартному
расширению RETURNING
, можно сделать так:
WITH new_authors(id) AS (
INSERT INTO authors
( name)
VALUES
('Ivan Ivanov')
RETURNING id
)
, new_books(id) AS (
INSERT INTO books
( title)
VALUES
('Ivan''s Book')
RETURNING id
)
INSERT INTO book_authors (author_id, book_id)
SELECT new_authors.id, new_books.id
FROM new_authors CROSS JOIN new_books
;
SELECT * FROM book_authors;
В других СУБД, где этого или подобного расширения нет, скорее всего нельзя.
Принял решение использовать транзакции, как посоветовали выше. вот пример, может кому-то поможет
START TRANSACTION;
SET AUTOCOMMIT = 0;
INSERT INTO authors(author_name) VALUE ('Vern');
SET @a = LAST_INSERT_ID();
INSERT INTO books(title) VALUE ('Captain');
SET @b = LAST_INSERT_ID();
INSERT INTO books_data(author_id, book_id) VALUES (@a, @b);
COMMIT;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
На сайте на разных страницах должен выводиться контент, редактируемый из админкиИ контент по своей структуре разный: на некоторых страницах...
У меня есть два набора файлов (основной и дополнительный) и я хотел бы держать их отдетьно друг от друга
Я не понимаю как грамотно сделать, что бы при выводе ответа - символы делились по 4 части (не так(10101010) -> а вот так (1010 1010))