같은 테이블내의 데이터를 복사해서 insert하고싶습니다.
본문
g5_member 테이블에서
mb_no | mb_id | mb_name | mb_key |
1 | admin | 관리자 | aaa |
2 | test | 테스트 | aaa |
만약 이런식의 테이블이 있다고 가정을 한다면
1번째 행에있는 admin, 관리자, aaa의 값중에서 admin, 관리자 이렇게값만 가지고
아래의 3번째 행으로 insert를 하고싶습니다.
단순하게 select * from 해서 테이블의 행을 읽어오고 다시 insert문으로 하면 되지만
그렇게 하는 방법말고 혹시 mysql에서 바로 할수있을까요??
mb_no | mb_id | mb_name | mb_key |
1 | admin | 관리자 | aaa |
2 | test | 테스트 | aaa |
3 | admin | 관리자 | bbbbb |
이런식으로 mb_id='admin' and mb_key='aaa' 이행의 모든 정보를 같은 테이블에 insert하는데
마지막의 mb_key값만 제가 원하는 값을 넣고싶습니다.
위의 표와같이 bbbbb 같은식으루요 나머지 모든 행은 복사되고 insert되지만
특정 필드만 제가 작성하여 넣는 방법이있을까요??
아 그리고 mb_no는 auto_increment 자동증가입니다.
답변 2
필드가 40-50 개 라면 임시 테이블을 사용하는 방법이 있습니다.
member 테이블과 똑같은 구조의 임시 테이블 member_tmp 를 만듭니다.
일단 작업을 하기 전에 start transaction 으로 트랜잭션을 선언하고
해당 임시테이블을 지웁니다. 그리고 select 한걸 그대로 memeber_tmp 로 넣는겁니다.
그런다음 해당 key 값을 바꾸고
member_tmp 의 내용 그대로 insert 를 합니다.
그리고 commit 을 선언하여 트랜잭션을 종료합니다.
추가로 이런 작업은 통상 프로시져로 처리하는게 간단하지요 ^^
INSERT INTO g5_member (mb_id, mb_name, mb_key) SELECT mb_id, mb_name, 'bbbbb' as mb_key FROM g5_member WHERE mb_id='admin';