Achei este tópico semelhante às minhas consultas Como vincular chave estrangeira com nome diferente Mas, infelizmente, com a resposta, meu problema não foi resolvido. Como no meu exemplo de tabela, ele não cria nenhuma chave primária. Todas as chaves estrangeiras apenas.
Aqui está o código:
CREATE TABLE ref_data(
user_id INT(11) NOT NULL,
ref_id INT(11) NOT NULL,
ref_name VARCHAR(30) NOT NULL,
ref_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT FK_user_id FOREIGN KEY(user_id) REFERENCES client (user_id),
CONSTRAINT FK_ref_id FOREIGN KEY(ref_id) REFERENCES client (user_id),
CONSTRAINT FK_ref_name FOREIGN KEY(ref_name) REFERENCES client (firstname)
);
Isso me dá:
errno: 150 "Restrição de chave estrangeira formada incorretamente"
Aqui estou usando user_id duas vezes com 1st como "user_id" 2nd como "ref_id". Também usando o primeiro nome como "ref_name".
mesa do cliente:
CREATE TABLE client (
`user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(30) NOT NULL UNIQUE KEY,
`email` VARCHAR(50) NOT NULL UNIQUE KEY,
`firstname` VARCHAR(30) NOT NULL,
`lastname` VARCHAR(30) NOT NULL,
`password` CHAR(128) NOT NULL
);
Ok, ao tentar criar a tabela ref_data, após o erro da chave estrangeira, vejo o seguinte:
ÚLTIMO ERRO DE CHAVE ESTRANGEIRA
------------------------ 2017-07-13 01:07:00 37ec Erro na restrição de chave estrangeira da tabela
ref_data
:FOREIGN KEY (ref_name) REFERENCES client (firstname)):
Não é possível encontrar um índice na tabela referenciada onde as colunas referenciadas aparecem como as primeiras colunas, ou os tipos de coluna na tabela e a tabela referenciada não correspondem à restrição. Observe que o tipo de armazenamento interno de ENUM e SET mudou nas tabelas criadas com> = InnoDB-4.1.12, e tais colunas em tabelas antigas não podem ser referenciadas por tais colunas em novas tabelas. Consulte http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html para a definição correta da chave estrangeira. Criar mesa '
test
.ref_data
'com restrição de chave estrangeira falhou. Não há índice na tabela referenciada onde as colunas referenciadas aparecem como as primeiras colunas perto de 'FOREIGN KEY (ref_name) REFERENCES client (firstname))'.
O que esse erro está basicamente dizendo: (em negrito)
Não há índice no 'primeiro nome' para a tabela 'cliente' (a parte após a cláusula REFERENCES da FOREIGN KEY
Mas é uma solução simples. Execute este SQL na tabela do cliente :
ALTER TABLE `client` ADD INDEX(`firstname`);
... e então execute a tabela ref_data SQL novamente.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras