2012-02-06 3 views
-1

다음 MySQL의 구문은 제대로 작동합니다INSERT COUNT IF() = 0

SELECT 
    IF (
    (SELECT COUNT(id) FROM preorder) = 0, 
    1, 
    (SELECT MAX(id) + 1 FROM preorder) 
) AS X 

이 나에게 내가 테이블 예약 주문에 삽입 할 하나 개의 값을 제공합니다. 시험해 보면

INSERT INTO preorder (id) 
VALUES 
    (SELECT 
    IF (
     (SELECT COUNT(id) FROM preorder) = 0, 
     1, 
     (SELECT MAX(id) + 1 FROM preorder) 
    ) AS X) 

더 이상 작동하지 않습니다. MySQL은 단지 menual :-)을 읽도록 지시한다.

구문의 목적은 내 자신의 자동 증분 필드를 생성하는 것이다. 카운트가 0이 아닌 경우 1을, 카운트가 0이 아닌 경우 ID 열의 최대 값을 삽입하려고합니다.

편집

: 더 나은 방법이

INSERT INTO preorder (id) 
VALUES 
    (
    IF (
     (SELECT COUNT(id) FROM preorder AS Y) = 0, 
     1, 
     (SELECT MAX(id) + 1 FROM preorder AS X) 
    ) 
) 

있습니까 : 는 나는 다음과 같은 구문을 사용하여 작동하도록 관리?

+0

왜 자동 증가 필드가 필요합니까? 기존의 문제점은 무엇입니까? 또한 구성표가있는 행을 삭제하면 다음 번에 아무것도 삽입하지 않으면 복제본이 만들어집니다. – kba

+0

더 좋은 방법이 있습니까? 정확히 무엇을 성취하려고합니까? 행 번호를 매기려면'AUTO_INCREMENT'를 다시 작성하지 마십시오. 여기서 최종 목표는 무엇입니까? – Naltharial

+0

Kristian, 나는 약간의 유연성을 원합니다. 왜냐하면 제가 사용하고있는 테이블이 임시 데이터를 저장하는 데 사용되기 때문에 대부분의 데이터는 몇 분 후에 중복 될 것입니다. Naltharial, 나는 ID 번호에 관한 더 많은 유연성을 얻는 방법을 알아 내려고 노력하고 있습니다. 나는이 접근법이 정확하지 않을 수도 있다는 것을 알고 있습니다. 지금은 게시 된 것과 똑같은 더 나은 대체 구문을 찾고 있습니다. – Mark

답변

1

우선 : 하위 쿼리에서 SELECT에 사용하는 테이블에 INSERT을 입력 할 수 없습니다.

둘째 :이 작업을 sytnactically 것이라고하더라도, 그것은 functionalitywise를 작동하지 않을 것입니다 :이 같은 쿼리가

3 병렬 가면 당신은 엄청난 경쟁 조건이 있습니다 MySQLs AUTO_INCREMENT가하는 정확하게 - 당신이 그것으로 보았다 ?

+0

고마워, 오이겐. 구문은 나를 위해 작동합니다. 동시 쿼리가 문제를 일으킬 수 있다는 것을 알고 있습니다. 나는 아직도 이것에 대해 생각하고있다. AUTO_INCREMENT에 대해 알고 있습니다. 어쨌든 이것은 내가 개발하고있는 모든 서버에서 항상 작동하지는 않습니다 (아마도 MySQL 또는 다른 소프트웨어 버전이 너무 오래되었습니다). 나중에 다른 몇 가지 사항을 파악한 후에 사용하실 수 있습니다. – Mark