Reputation:
I'm trying to insert two rows on different tables at the same time.
The value of the subquery INSERT INTO's AUTO_INCREMENT or id
(if it already exists) should be written in the main query.
Currently I have this (simplified with just 3 values), but its not working. I'm wondering if there is a better way to do this.
INSERT IGNORE INTO access(`entryid`, `logid`, `urlid`)
SELECT '0', '1', (INSERT IGNORE INTO urls(`url`) VALUES('example.com'));
I can obviously do multiple separate queries for this purpose, but I think inserting it into one query improves reliability of my code (as it can never "fail" half-way through its queries). I'm just looking for a nested INSERT INTO solution.
Upvotes: 0
Views: 154
Reputation: 50
Why not move those queries into a transaction? If you do that if any of those queries fail the whole block will get rolled back. If you use LAST_INSERT_ID()
you can get the previous inserted ID and use that (see docs).
Example based on your query:
START TRANSACTION;
INSERT IGNORE INTO urls(`url`) VALUES('example.com');
INSERT IGNORE INTO access(`entryid`, `logid`, `urlid`) VALUES (0, 1, LAST_INSERT_ID());
COMMIT;
Upvotes: 1