2012-02-19 2 views
0

내 MySQl 테이블에는 idorder의 두 필드가 있습니다. id은 자동 증가 기본 키이므로 order의 초기 값을이 값과 일치 시키길 원하지만 키가 아니라 고유성 제약 조건이없는 편집 가능 항목도 필요합니다. 내 데이터베이스 삽입 방법을 통해이 작업을 수행 할 수 있습니까? 마지막으로 삽입 된 ID를 다시 쿼리하지 않고 그렇게 할 수 있습니까?기본 키가 아닌 자동 증가 필드

일반 SQL과 PHP도 훌륭하지만, 필자는 paris/idiorm을 사용하여 해당 기능을 사용하는 솔루션을 편리하게 사용할 수 있습니다.

+0

저에게 문제가되는 디자인 같은 소리가납니다. – markus

+0

@markus 왜 그렇습니까? – wheresrhys

+0

Essencially 그것은 의존성을 생성하고 데이터베이스 무결성을 위협하기 때문에 함정이 될 수있는 불필요한 중복 정보를 유지합니다. – markus

답변

3

MySQL (버전 5.0.2 이상)에서 트리거를 생성 할 수 있습니다. 당신이 원하는대로

create trigger default_order_value AFTER INSERT ON orders 
    UPDATE order SET order = id WHERE id = new.id; 

그것은 그런 식으로 작동하지 않을 수 있습니다,하지만 당신은 그것을 편집 할 수 있습니다

은 비 프로덕션 데이터베이스에서이보십시오. 이것은 또 다른 방아쇠의 예입니다 :

CREATE TRIGGER default_order 
    BEFORE UPDATE ON orders 
    REFERENCING NEW ROW AS n 
    n.order = n.id; 
+0

Thsi가 이상적입니다. 나는 MySQL을 먼저 업그레이드해야한다. 다행스럽게도 현재 나의 로컬 dev 머신에 대한 호기심이다. – wheresrhys

+0

나는 분명히 올바른 생각을 가지고 있다고 생각하지만, eth 구문으로 aroudn을 많이 사용 함에도 불구하고 작동하도록 할 수는 없다. 지금까지 나는 CREATE TRIGGER'default_order_value'를 작성했습니다. 클러스터에 INSERT ON 한 후 각 행에 대해 BEGIN UPDATE 클러스터'SET'order' = [NEW.id WHERE id = NEW.id; END – wheresrhys

+0

내가 어떻게 작동하는지 보려면 여기를 참조하십시오. http://stackoverflow.com/questions/9353042/can-i-update-the-just-added-row-using-mysql-triggers – wheresrhys

관련 문제