Como faço para adicionar as chaves estrangeiras para duas mesas Innob para que eles autoupdate uns aos outros?
-
05-07-2019 - |
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
(
intcontact_id
(11) NOT NULL auto_increment,
intuser_id
(11) unsigned padrão NÃO NULO '0',
varcharemail
(100) padrão NÃO NULO '',
varcharcompany
(50) padrão NÃO NULO '',
varcharfirst_name
(50) padrão NÃO NULO '',
varcharlast_name
(50) padrão NÃO NULO '',
varcharaddress
(100) padrão NÃO NULO '',
varcharaddress_2
(100) padrão NÃO NULO '',
varcharcity
(50) padrão NÃO NULO '',
varcharstate
(50) padrão NÃO NULO '',
varcharcountry
(50) padrão NÃO NULO '',
varcharpostal_code
(30) padrão NÃO NULO '',
varcharphone
(30) padrão NÃO NULO '',
varcharfax
(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,
varcharlist_name
(50) padrão NÃO NULO '',
intlead_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',
intparentID
(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
(
intuserID
(11) NOT NULL auto_increment,
intaccess_level
(11) padrão NÃO NULO '0',
varcharusername
(100) padrão NÃO NULO '',
varcharpassword
(100) padrão NÃO NULO '',
varcharfirst_name
(50) padrão NÃO NULO '',
varcharlast_name
(50) padrão NÃO NULO '',
varcharcompany
(100) padrão NÃO NULO '',
varcharemail
(100) padrão NÃO NULO '',
PRIMARY KEY (userID
),
UNIQUE KEYusername
(username
)
) MOTOR = InnoDB PADRÃO CHARSET = latin1;
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?