2012-03-13 1 views
0

우리가 만들고있는 관리 응용 프로그램의 일부로 가능한 많은 PHP 및 MySQL 코드를 최적화하려고 노력하고 있지만 걱정이됩니다. ...MySQL을 사용하는 테이블에 중첩 된 AUTO_INCREMENT 필드를 만들려면 어떻게해야합니까?

사실, 고객 주문을 저장하기위한 Google의 데이터 스키마 다음은 :

우리가 기본적으로 할 법적 (매년 ORDER_ID 필드를 재설정 및 계정 관리자는 일반적으로 첫 번째를 선호하지만, 책임을 위해, 당신이 당신의 id를 재설정하거나 그들이 성장할 수 있도록 할 수 있습니다 무엇
year -> DATE 
order_id -> INT(11) 
order_line_id -> INT(11) 

옵션이 아니라 두 번째 것), 주문 행 id에 대해서도 동일하게 적용되므로 각 주문에는 각 연속 주문에 대해 행 ID가 재설정됩니다.

그러나이 모든 것은 손으로 수행됩니다. 이것은 이상과는 거리가 멀며 적절한 TM 방법으로 프로세스를 자동화하고 MySQL에 재설정 제어를 넘겨주고 싶습니다.

하지만 질문은 ... 어떻게됩니까? 어떻게 MySQL은 자동으로 의 AUTO_INCREMENT 필드가 각각의 새로운 을 order_line_id 다시 말해을 ORDER_ID 자동 에 대한 AUTO_INCREMENT 필드가 각각의 새로운 을 ORDER_ID 재설정합니까?

+1

autoincrement는 기본 키를위한 것입니다. 귀하의 경우에는 order_id가 클라이언트 지정 정보로 PK가 될 수 없으며 db 스키마의 무결성으로 수행 할 작업이 없습니다. – Rufinus

답변

1

글쎄, 내가 알기 론, mysql에서 오직 auto_increment 만 primary_key에 가질 수있다. 그렇지 않으면, 필드 값을 삽입/업데이트 할 때 이러한 값을 수동으로 설정해야한다. 그러나 그다지 문제는 아니다.

또한 mysql에서 2 개의 키를 가질 수 있으므로 auto_increment on (order_id, year)를 사용하는 primary_key가있을 수 있습니다. 당신이 최대 (ORDER_ID) 년 검색 하위 쿼리에 의해 삽입 할 때

는 달리 ORDER_ID, 예를 들어, this_year

0

당신이 할 수있는 설정 하나 개의 자동 증가 = 설정됩니다. 그러나 BEFORE INSERT 트리거를 설정하여 시퀀스를 기반으로 열을 업데이트 할 수 있습니다.

mysql에는 시퀀스 엔티티가 없으므로 직접 수행해야합니다.

쉬운 방법은 순서와 컬럼에 인덱스를 생성하고,

select order_id+1 into new_order_id 
     from your_table_name order by order_id desc limit 1 

메모를 사용하여 수동으로 실시 첫 번째 행을 넣어, 즉 100 % 올바른 방법이 아닙니다. 맨 위의 것을 삭제하면 동일한 order_id가 다시 나타납니다.

100 % 유효 시퀀스를 얻으려면 u 테이블을 만들고 수동으로 관리하십시오.

관련 문제