database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30306 게시물 읽기
No. 30306
INSERT시 PK값 + 다른값예 계산결과도 동시에 넣을수 있는 방법이 있을까요?
작성자
권남
작성일
2012-08-11 13:16:56
조회수
4,708

MySQL은 AUTO_INCREMENT로 PK를 만들다보내 애매한 경우가 있습니다.

예를들어 값을 INSERT하는데 어떤 필드의 값이 PK 값 + 사용자 입력값 이런 식이어야 하는 경우가 있거든요.

SEQUENCE기반일 경우에는 이게 쉽게 되지만, AUTO_INCREMENT 방식에서는 INSERT 후에 UPDATE를 하거나, TRIGGER를 걸거나, 아니면 아예 저걸 넣지 말고 SELECT 할 때마다 계산하도록 하거나 밖에 방법이 없어보입니다.

INSERT로 이를 한 방에 해결하는 방법이 없을까요? 트리거를 사용하는 방법도 제외하고요.

사실 정확히 말하면 제가 원하는 것은 PK값+사용자입력값에 인덱스거 걸린 상태가 되는 것입니다. 정렬 기준이거든요.


이 글에 대한 댓글이 총 7건 있습니다.

복합인덱스로 설정하면 될 것 같네요

박인호(paerae)님이 2012-08-12 05:28:44에 작성한 댓글입니다.

복합인덱스로 설정할 수 없습니다.

ID값과 다른 값을 그냥 넣는게 아니라 계산해서 변형해서 넣어야 하거든요.

권남님이 2012-08-14 11:27:19에 작성한 댓글입니다. Edit

 

질문이 이해가 안되네여 -_-

 

예를좀 들어주심이..

민족님이 2012-08-14 14:18:19에 작성한 댓글입니다. Edit
INSERT INTO [TABLE] ( user_value, some_field ) SELECT 'aaa', CONCAT('aaa', 1 + COALESCE((SELECT MAX(pk) FROM [TABLE]), 0));
 
이런 방식을 원하신거 아닐까 싶습니다.
 
예제는 다음 링크를 참조하세요 : http://sqlfiddle.com/#!2/62484/1
박현우(lqez)님이 2012-08-14 16:10:35에 작성한 댓글입니다.
이 댓글은 2012-08-14 16:10:48에 마지막으로 수정되었습니다.

   박현우님 예제의 내용이 맞습니다. 감사합니다.
INSERT 시 들어갈 ID값과 다른 컬럼 값을 합쳐서 제 3의컬럼값을 생성하는 것입니다.
그런데 결국 max(pk)는 ID를 읽는것이 아니라서 auto_increment 값이 조정돼 있을경우 심각한 헛점이 될것 같습니다.
 

권남님이 2012-08-15 14:49:35에 작성한 댓글입니다. Edit

MAX(pk)는 쿼리를 단순하게 하려고 예로 든 것이고, 정말 AUTO_INCREMENT 값으로 진행을 원하시면 INFORMATION_SCHEMA 를 활용하시면 됩니다.

INSERT INTO temp ( name, foo ) 

  SELECT 'aaa', CONCAT('aaa', 

   coalesce((

     SELECT auto_increment FROM INFORMATION_SCHEMA.tables 

       WHERE table_name = 'temp' AND table_schema = DATABASE()

   ), 0));

예제 : http://sqlfiddle.com/#!2/5c4c9/1

박현우(lqez)님이 2012-08-17 02:08:20에 작성한 댓글입니다.

감사합니다.
근데 ORM에서 써야하는데..
고민이 깊어지네요... ㅜㅜ
 

권남님이 2012-08-23 12:20:58에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
30309문법 에러 확인 좀 부탁드려요. [2]
이광영
2012-08-23
3773
30308중복제거문제 [1]
김양훈
2012-08-21
3478
30307여러명이 쓰는 가계부 DB에서 수입,지출 합계 리스트 만들기 [1]
윤찬석
2012-08-16
4156
30306INSERT시 PK값 + 다른값예 계산결과도 동시에 넣을수 있는 방법이 있을까요? [7]
권남
2012-08-11
4708
30305레코드를 비교하는데요 [1]
정병화
2012-08-10
3361
30303MySQL에서 T-SQL(PL/SQL) 문법만으로 쿼리 작성이 가능한가요? [1]
최윤성
2012-08-09
3768
30301innodb mysql 파일 용량 [2]
황윤윤
2012-08-07
6100
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.067초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다