서로를 자동화 할 수 있도록 두 개의 innob 테이블에 외래 키를 추가하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1005276

문제

비슷한 데이터가있는 두 개의 테이블 사용자와 lead_contacts가 있습니다. 누군가가 제품을 구입하면 사용자가됩니다. 아래의 두 가지 생성 스테이멘트를 어떻게 수정해야합니까?

  • 리드 테이블은 사용자가 생성 될 때 First_name, Last_name, 회사 및 이메일로 새 항목을받습니다.
  • First_Name, Last_Name, 회사 및 사용자의 이메일 테이블이 리드 테이블 정보가 변경되면 자동으로 업데이트됩니다.

    테이블을 만듭니다 lead_contacts (
    contact_id int (11) null auto_increment,
    user_id int (11) 부호없는 기본값 '0',
    email varchar (100) null default '',
    company varchar (50) null default '',
    first_name varchar (50) null default '',
    last_name varchar (50) null default '',
    address varchar (100) null default '',
    address_2 varchar (100) null default '',
    city varchar (50) null default '',
    state varchar (50) null default '',
    country varchar (50) null default '',
    postal_code varchar (30) null default '',
    phone varchar (30) null default '',
    fax varchar (30) null default '',
    ship_bill_same enum ( 'y', 'n') null default 'y',
    notes 텍스트는 null,
    admin_notes 텍스트는 null,
    list_name varchar (50) null default '',
    lead_list int (11) 부호없는 기본값 '0',
    is_master_list enum ( 'n', 'y') null default 'n',
    active_work enum ( 'y', 'n') null default 'y',
    parentID int (11) 부호없는 기본값 '0',
    기본 키 (contact_id),
    열쇠 user_id (user_id),
    열쇠 lead_list (lead_list),
    열쇠 is_master_list (is_master_list),
    열쇠 active_work (active_work),
    열쇠 parentID (parentID)
    ) 엔진 = innodb 기본 charset = latin1 pack_keys = 1;

    테이블을 만듭니다 users (
    userID int (11) null auto_increment,
    access_level int (11) null default '0',
    username varchar (100) null default '',
    password varchar (100) null default '',
    first_name varchar (50) null default '',
    last_name varchar (50) null default '',
    company varchar (100) null default '',
    email varchar (100) null default '',
    기본 키 (userID),
    독특한 열쇠 username (username)
    ) 엔진 = innoDB 기본 charset = latin1;

도움이 되었습니까?

해결책

외국 키가 어떻게 작동하는지 오해한다고 생각합니다.

리드로부터 사용자에게 참조된다는 것은 리드의 행이 참조하기 전에 사용자에게 행이 이미 존재해야 함을 의미합니다.

SQL에는 종속 테이블이 주문시 상위 테이블에 행을 자동으로 생성하는 방법이 없습니다.

당신은 트리거로 이것을 할 수 있다고 생각합니다. 그러나 외국의 주요 제약은 아닙니다. 게다가, 부모 테이블에 채울 값은 어딘가에서 나와야합니다. 응용 프로그램 또는 트리거에서 삽입 문에 지정하거나 사용자 테이블의 각 열에 대해 정의 된 기본값을 사용해야합니다. 고유 한 제약이 있다는 점을 감안할 때 users.username, 나는 이것이 방아쇠에서 가능할 것이라고 생각하지 않습니다.


Re : 의견의 후속 질문 :

아니요, 외국 키는 당신이 묘사하는 것을 할 수 없습니다. 정보를 수정할 때 leads 표 (외국 키가있는 테이블), 외국 키가 할 수있는 일은 변경하려고하면 수정을 방지하는 것입니다. leads.user_id 열에서 찾을 수없는 값으로 열 users 테이블.

아이의 외국 열쇠 (leads) 테이블은 부모의 어떤 것도 변경할 수 없습니다 (users) 테이블.

당신의 잘못된 이해의 근원이 무엇인지 잘 모르겠습니다. 어딘가에 읽었거나 누군가가 이런 일을하는 것을 보았습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top