Не, не можете да вмъкнете в няколко таблици в една 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()код>
за повторно използване на стойности за автоматично увеличение.
Казахте „След цялото това време, опитвайки се да го разбера, пак не работи. Не мога ли просто да сложа току-що генерирания идентификатор в $var и да сложа този $var във всички команди на MySQL? "
Позволете ми да уточня:тук има 3 възможни начина:
-
В кода, който виждате по-горе. Това прави всичко в MySQL и
LAST_INSERT_ID()
във втория израз автоматично ще бъде стойността на колоната за автоматично увеличение, която е била вмъкната в първия израз.За съжаление, когато самият втори израз вмъква редове в таблица с колона с автоматично увеличение,
LAST_INSERT_ID()
ще бъде актуализиран до тази на таблица 2, а не на таблица 1. Ако все още имате нужда от тази от таблица 1 след това, ще трябва да я съхраним в променлива. Това ни води до начини 2 и 3: -
Ще съхранява
LAST_INSERT_ID()
ina MySQL променлива:INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...); INSERT INTO table3 (@mysql_variable_here, ...);
-
Ще съхранява
LAST_INSERT_ID()
в aphp променлива (или всеки език, който може да се свърже с база данни, по ваш избор):INSERT ...
- Използвайте езика си, за да извлечете
LAST_INSERT_ID()
, или чрез изпълнение на този литерал в MySQL, или като използвате напримерmysql_insert_id()
на php което прави това за вас INSERT [използвайте вашата php променлива тук]
ПРЕДУПРЕЖДЕНИЕ
Какъвто и начин за решаване на това да изберете, трябва да решите какво да се случи ако изпълнението бъде прекъснато между заявките (например вашият сървър на база данни се срива). Ако можете да живеете с „някои са свършили, други не“, не четете.
Ако обаче решите „или всички заявки завършват, или нито една не завършва – не искам редове в някои таблици, но няма съвпадащи редове в други, винаги искам таблиците ми в базата данни да бъдат последователни“, трябва да обвиете всички изрази в транзакция . Ето защо използвах BEGIN
и COMMIT
тук.