2013-05-10 2 views
0

나는 100 개 이상의 테이블을 가지고 있습니다. 사용자 테이블은 그 중 하나입니다. 여러 테이블과 관련된 사용자입니다. 사용자를 삭제하려면 다른 테이블에있는 사용자 테이블 참조를 확인해야합니다. 그래서 나는 다른 테이블에 존재하는 외국 관계의 수를 얻을 필요가있다. 사용자 추가는 다른 테이블에 저장됩니다. 참조 번호가 1 이상이므로 삭제해서는 안됩니다.참조 번호가 다른 테이블에 있습니다 - PostgreSQL

저는 PostgreSQL에서 일하고 있습니다. 나는 그것이 mysql에서 가능하다고 생각한다. PostgreSQL을 처음 접했을 때 Postgresql에 대해 잘 모릅니다. 사전에

감사합니다.

답변

3

외래 키를 정의 할 때 다른 테이블에 여전히 키가있는 경우 삭제를 제한 할 수있는 옵션을 제공 할 수 있습니다.

... 
    loop 
     begin 
      delete ... where id = 1; 
     exception 
      when restrict_violation then null 
     end; 
    end loop; 

이 외국과 관련이있는 사용자가 삭제되지 않습니다 방법 및 기타 : restrict_violation - 여기 postgres manual

CREATE TABLE order_items (
    product_no integer REFERENCES products ON DELETE RESTRICT, 
    order_id integer REFERENCES orders ON DELETE CASCADE, 
    quantity integer, 
    PRIMARY KEY (product_no, order_id) 
); 
+0

참조가 있으면 삭제하면 안됩니다. 그래서 나는 참조가없는 레코드 만 삭제해야합니다. – Shankar

+0

예, ON DELETE RESTRICT는 행이 삭제되지 않도록합니다. –

0

장소의 예는 각 루프 사용 오류 조건 내에서 begin exception 블록에서 삭제할 수 있습니다 의지가 없다.

관련 문제