Como faço para adicionar as chaves estrangeiras para duas mesas Innob para que eles autoupdate uns aos outros?

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

Pergunta

Eu tenho dois usuários mesas e lead_contacts que têm dados semelhantes. Quando alguém compra um produto que se tornar um usuário. Como devo modificar os dois criam staements abaixo assim:

  • que a tabela de leads recebe um novo entrada com first_name, last_name, empresa e e-mail, quando um usuário é criado.
  • o first_name, last_name, empresa e e-mail na tabela usuários é atualizado automaticamente quando a informação mesa leads é alterado

    CREATE TABLE lead_contacts (
    int contact_id (11) NOT NULL auto_increment,
    int user_id (11) unsigned padrão NÃO NULO '0',
    varchar email (100) padrão NÃO NULO '',
    varchar company (50) padrão NÃO NULO '',
    varchar first_name (50) padrão NÃO NULO '',
    varchar last_name (50) padrão NÃO NULO '',
    varchar address (100) padrão NÃO NULO '',
    varchar address_2 (100) padrão NÃO NULO '',
    varchar city (50) padrão NÃO NULO '',
    varchar state (50) padrão NÃO NULO '',
    varchar country (50) padrão NÃO NULO '',
    varchar postal_code (30) padrão NÃO NULO '',
    varchar phone (30) padrão NÃO NULO '',
    varchar fax (30) padrão NÃO NULO '',
    ship_bill_same enum ( 'Y', 'N') padrão NÃO NULO 'Y',
    notes texto não NULL,
    admin_notes texto não NULL,
    varchar list_name (50) padrão NÃO NULO '',
    int lead_list (11) unsigned padrão NÃO NULO '0',
    is_master_list enum ( 'N', 'Y') padrão NÃO NULO 'N',
    active_work enum ( 'Y', 'N') padrão NÃO NULO 'Y',
    int parentID (11) unsigned padrão NÃO NULO '0',
    PRIMARY KEY (contact_id),
    user_id CHAVE (user_id),
    lead_list CHAVE (lead_list),
    is_master_list CHAVE (is_master_list),
    active_work CHAVE (active_work),
    parentID CHAVE (parentID)
    ) MOTOR = InnoDB PADRÃO CHARSET = latin1 PACK_KEYS = 1;

    CREATE TABLE users (
    int userID (11) NOT NULL auto_increment,
    int access_level (11) padrão NÃO NULO '0',
    varchar username (100) padrão NÃO NULO '',
    varchar password (100) padrão NÃO NULO '',
    varchar first_name (50) padrão NÃO NULO '',
    varchar last_name (50) padrão NÃO NULO '',
    varchar company (100) padrão NÃO NULO '',
    varchar email (100) padrão NÃO NULO '',
    PRIMARY KEY (userID),
    UNIQUE KEY username (username)
    ) MOTOR = InnoDB PADRÃO CHARSET = latin1;

Foi útil?

Solução

Eu acho que você não entendeu como estrangeira chaves trabalho.

A referência de ligações aos meios de usuários que uma linha já deve existir em usuários antes de uma linha em leads pode referenciá-lo.

Não há nenhuma maneira em SQL para fazer uma tabela dependente criar automaticamente uma linha em sua tabela pai na demanda.

Você pode fazer isso com um gatilho, eu suponho. Mas não um restrições de chave estrangeira. Além disso, os valores para preencher na tabela o pai deve vir de algum lugar. Ou você precisa especificá-los em uma instrução INSERT em sua aplicação ou em um gatilho, ou então usar os padrões definidos para cada coluna na tabela de usuários. Dado que você tem uma restrição exclusiva em users.username, eu não acho que isso seria possível a partir de um gatilho.


Re: sua pergunta acompanhamento no comentário:

Não, uma chave estrangeira não pode fazer o que você está descrevendo. Quando você modifica informações na tabela de leads (a tabela com a chave estrangeira), o única coisa que uma chave estrangeira pode fazer é evitar que a modificação se você tentar alterar a coluna leads.user_id para um valor que não é encontrado na tabela de users.

A chave estrangeira na tabela filho (leads) não pode mudar nada na tabela pai (users).

Eu não tenho certeza qual é a fonte de sua compreensão equivocada. Você leu isso em algum lugar ou ver alguém fazer algo assim?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top