MySQL 데이터베이스에 두 개의 테이블, 즉 "messages"및 "message_tags"가 있습니다. "messages"테이블에는 자동 증가 열 "message_id"가 있습니다. Java에서 java.sql 패키지를 사용하여 데이터베이스에 일괄 처리 메시지를 추가하려고합니다. 쿼리를 저장하기 위해 하나의 트랜잭션에서이 작업을 수행하려고합니다.트랜잭션의 모든 삽입 ID 가져 오기
START TRANSACTION
INSERT INTO messages(`message`) VALUES ('message1');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagbar1');
INSERT INTO messages(`message`) VALUES ('message2');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo1');
INSERT INTO messages(`message`) VALUES ('message3');
INSERT INTO messages_tags(`message_id`, `tags`) VALUES (LAST_INSERT_ID(), 'tagfoo2');
...
COMMIT
그들이 원래 메시지를 일치시킬 수 있다는 방식으로 다시 자바로 메시지 테이블에서 새로 생성 된 ID를 얻을 수 있습니다 :
내 SQL 코드의 모양은? 이런 식으로 뭔가 : 그것은 정적 또는 동적 인 경우
message1 => 1234
message2 => 1235
message3 => 1236
...
트랜잭션은 쿼리를 저장하지 않습니다. 트랜잭션이 수행하는 유일한 작업은 실패한 경우 롤백 할 수있게하는 것입니다. 각 쿼리를 실행해야합니다. jcho360의 대답은 맞지만 쿼리를 저장하지는 않습니다. Java에서 last_insert_id 쿼리를 실행하여 사용자 변수를 사용하지 않아도됩니다. 모든 값을 하나의 큰 INSERT로 결합 할 수는 있지만, 각 INSERT 후에 last_insert_id를 얻을 수 없습니다. –
의견을 보내 주셔서 감사합니다. 데이터베이스가 원격이며 트랜잭션에서 메시지를 일괄 처리로 보내서 연결을 저장하려고합니다. – Thomas
오, 당신은 트랜잭션을 필요로하지 않는 한, 당신은 여전히 트랜잭션을 일괄 처리 할 필요가 없습니다. –