꽤 쉬운 MySQL 질문이 있습니다. 다음 MySql 쿼리를 실행할 때 table1에서 LAST INSERTED ID를 반환해야합니다.
INSERT INTO table1 (title,userid) VALUES ('test',1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT LAST_INSERT_ID();
현재 코드가 table1 대신 table2의 LAST INSERT ID를 반환한다는 것을 이해할 수 있으므로 사이에 table2에 삽입하더라도 어떻게 table1에서 id를 얻을 수 있습니까?
답변
마지막 삽입 ID를 변수에 저장할 수 있습니다.
INSERT INTO table1 (title,userid) VALUES ('test', 1);
SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO table2 (parentid,otherid,userid) VALUES (@last_id_in_table1, 4, 1);
또는 최대 ID frm 테이블을 얻습니다.
INSERT INTO table1 (title,userid) VALUES ('test', 1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(), 4, 1);
SELECT MAX(id) FROM table1;
답변
실제로 이전 LAST_INSERT_ID ()를 두 번째 테이블에 저장 했으므로 여기에서 가져올 수 있습니다.
INSERT INTO table1 (title,userid) VALUES ('test',1);
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT parentid FROM table2 WHERE id = LAST_INSERT_ID();
답변
이를 통해 두 개의 다른 테이블에 행을 삽입하고 두 테이블 모두에 대한 참조를 작성할 수 있습니다.
START TRANSACTION;
INSERT INTO accounttable(account_username)
VALUES('AnAccountName');
INSERT INTO profiletable(profile_account_id)
VALUES ((SELECT account_id FROM accounttable WHERE account_username='AnAccountName'));
SET @profile_id = LAST_INSERT_ID();
UPDATE accounttable SET `account_profile_id` = @profile_id;
COMMIT;
답변
나는 bash에서 같은 문제가 있었고 다음과 같이하고있다 :
mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');"
잘 작동합니다 🙂 그러나
mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');set @last_insert_id = LAST_INSERT_ID();"
mysql -D "dbname" -e "insert into table2 (id_tab1) values (@last_insert_id);"
작동하지 않습니다. 첫 번째 명령 후에 쉘은 mysql에서 로그 아웃되고 두 번째 명령에 대해 다시 로그인 한 다음 변수 @last_insert_id가 더 이상 설정되지 않기 때문입니다. 내 해결책은 다음과 같습니다.
lastinsertid=$(mysql -B -N -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');select LAST_INSERT_ID();")
mysql -D "dbname" -e "insert into table2 (id_tab1) values (${lastinsertid});"
어쩌면 누군가가 bash 솔루션을 찾고있을 것입니다 🙂
답변
레코드를 입력하는 사람은 한 명뿐이므로 삽입 직후에 다음 쿼리를 실행합니다.
$result = $conn->query("SELECT * FROM corex ORDER BY id DESC LIMIT 1");
while ($row = $result->fetch_assoc()) {
$id = $row['id'];
}
데이터베이스에서 마지막 ID를 검색합니다.
답변
InnoDB 솔루션이없는 경우 : 절차를 사용할 수 있습니다
don't forgot to set the the delimiter for storing the procedure with ;
CREATE PROCEDURE myproc(OUT id INT, IN otherid INT, IN title VARCHAR(255))
BEGIN
LOCK TABLES `table1` WRITE;
INSERT INTO `table1` ( `title` ) VALUES ( @title );
SET @id = LAST_INSERT_ID();
UNLOCK TABLES;
INSERT INTO `table2` ( `parentid`, `otherid`, `userid` ) VALUES (@id, @otherid, 1);
END
그리고 당신은 그것을 사용할 수 있습니다 …
SET @myid;
CALL myproc( @myid, 1, "my title" );
SELECT @myid;
답변
last_id_in_table1 변수를 PHP 변수에 저장하여 나중에 사용할 수 있습니까?
이 last_id를 사용하면이 last_id가있는 다른 테이블에 일부 레코드를 첨부해야하므로 다음이 필요합니다.
1) INSERT를하고 last_id_in_table1을 얻습니다.
INSERT into Table1(name) values ("AAA");
SET @last_id_in_table1 = LAST_INSERT_ID();
2) 다른 테이블의 결정되지 않은 행의 경우 삽입에서 생성 된 last_id_insert로이 행을 업데이트합니다.
$element = array(some ids)
foreach ($element as $e){
UPDATE Table2 SET column1 = @last_id_in_table1 WHERE id = $e
}