2012-06-18 2 views
1

나는 다음과 같은 구조로 간단한 테이블을 가지고 행을 삭제할 때 :"이 행에 대한 고유 식별자가 없습니다." 포스트 그레스에

CREATE TABLE dateien(
    id int PRIMARY KEY UNIQUE DEFAULT NEXTVAL('dateien_id_seq'), 
    name varchar(64), 
    zeit timestamp DEFAULT now(), 
    groesse float, 
    dateityp_id int references dateitypen(id), 
    benutzer_id int references benutzer(id) 
); 

난 항상 메시지를받을 phppgadmin를 통해 행을 삭제하려고 : 또한 No unique identifier for this row.

을 pure SQL을 사용하면 delete 문 다음에 아무 효과가 없습니다. 문제가 무엇인지 말해 줄 수 있습니까?

+1

삭제 진술 * 이후 아무 효과가 없다는 것을 정확히 의미합니까? 오류가 발생합니까? 삭제를 실행 했습니까? "효과가 없습니다"라는 문자는 어디에 입력합니까? –

+0

다음을 입력하십시오. dateien where id = 1;'그냥 행이 없습니다. '그리고이 ID가있는 행이 있습니다 – soupdiver

+0

다른 스키마에서이 이름으로 둘 이상의 테이블을 가질 가능성이 있습니까? – kgrittn

답변

1

아 젠장 ... 내가 실수를 발견했다. 이 테이블에서 활성화 된 방아쇠를 언급하는 것을 잊어 버렸습니다. 트리거이었다 :

CREATE TRIGGER update_quota BEFORE INSERT OR UPDATE OR DELETE 
ON dateien 
FOR EACH ROW 
EXECUTE PROCEDURE f_update_quota(); 

을하지만 삭제할 때 뭔가 잘못 돌아왔다. 그것이 작동하지 않는 이유입니다.

0

참조 된 테이블을 만드는 방법을 볼 수 없습니다.

dateityp_id int references dateitypen(id), 
benutzer_id int references benutzer(id) 

따라서 예를 들어 추측 할 수 있습니다. 테이블 제품, 주문, 데이트.

제품을 참조한 주문이 생성 된 후 제품이 제거되면 어떻게됩니까? SQL을 사용하면이를 지정할 수도 있습니다. 직관적으로 몇 가지 옵션이 있습니다.

  • 참조 된 제품을 삭제할 수 없습니다.
  • 주문도 삭제하십시오.
  • 다른 건 뭔가요?

누군가가 (dateien을 통해) 주문에 의해 계속 참조되는 제품을 삭제하려고 할 때 허용하지 않습니다. 다른 사람이 주문을 삭제하면 데이트 타임도 삭제됩니다.

product_no integer REFERENCES products ON DELETE RESTRICT, 
order_id integer REFERENCES orders ON DELETE CASCADE, 

제한 및 계단식 삭제가 가장 일반적인 두 가지 옵션입니다. RESTRICT는 NO ACTION과 으로 쓸 수도 있습니다.을 지정하지 않으면 기본값이기도합니다. 기본 키가 삭제 될 때 외래 키 열과 함께 발생해야하는 다른 두 가지 옵션이 있습니다 : SET NULL 및 SET DEFAULT. 이것들은 당신이 어떤 제약 사항을 지키지 못하게한다. 예를 들어, 조치가 SET DEFAULT를 지정하지만 디폴트 값이 외부 키를 충족시키지 않을 경우, 기본 키의 h 제는 실패합니다.

추가 정보 : http://www.postgresql.org/docs/7.4/static/ddl-constraints.html

+0

이 문제가 아니 었습니다. 내 대답에 설명 된 것을 언급하는 것을 잊어 버렸습니다.하지만 어쨌든 고마워요! – soupdiver

관련 문제