이러한 레코드를 여러 개 만들려면 어떻게해야합니까 (하나가 아닌 10 명의 사용자를 등록하기 위해)? 다음과 같은 해결책을 찾았습니다 (단지 5 개의 쿼리).
1 단계 : 새 데이터를 저장할 임시 테이블을 만듭니다.
CREATE TEMPORARY TABLE tmp (id bigint(20) NOT NULL, ...)...;
다음으로이 테이블을 값으로 채우십시오.
INSERT INTO tmp (username, password, bio, homepage) VALUES $ALL_VAL
여기 $ALL_VAL
에 값 목록을 배치하는 대신 ( 'test1', 'test1', 'bio1', 'home1'), ..., ( 'testn', 'testn', 'bion', 'homen')
단계 II : 'user'테이블로 데이터를 보냅니다.
INSERT IGNORE INTO users (username, password)
SELECT username, password FROM tmp;
여기서 일부 사용자가 이미 내부에있는 것을 허용하는 경우 "IGNORE"를 사용할 수 있습니다. 선택적으로이 단계 전에 단계 III과 유사한 UPDATE를 사용하여 이미 내부에있는 사용자를 찾아서 tmp 테이블에 표시 할 수 있습니다. 여기서는 사용자 이름이 PRIMARY
users 테이블에서 선언 된 것으로 가정 합니다.
3 단계 : 업데이트를 적용하여 모든 사용자 ID를 사용자에서 tmp 테이블로 읽습니다. 이것은 필수 단계입니다.
UPDATE tmp JOIN users ON tmp.username=users.username SET tmp.id=users.id
IV 단계 : 사용자의 읽기 ID를 사용하여 다른 테이블 작성
INSERT INTO profiles (userid, bio, homepage)
SELECT id, bio, homepage FROM tmp