Problema com query SQL errno: 150

The Dealer

Power Member
Alguem me sabe dizer porque é que me dá erro a criar a tabela Notas mas se tirar a Foreign Key referente à tabela Disciplinas já dá? (Geoblast eu sei que os vários campos notas continua a não ser o mais eficiente, mas por agora terá de servir)

Código:
CREATE TABLE IF NOT EXISTS Disciplinas (
  parent int(11) NOT NULL,
  child int(11) NOT NULL auto_increment,
  nome char(30),
  tipo varchar(10) DEFAULT 'C',
  semestre char(5) DEFAULT '-',
  Ano int,
  momentos int NOT NULL,
  PRIMARY KEY (child,nome)
)AUTO_INCREMENT=11 ;


CREATE TABLE Notas(
ID_Notas int NOT NULL AUTO_INCREMENT,
n1 char(5) DEFAULT '-',
n2 char(5) DEFAULT '-',
n3 char(5) DEFAULT '-',
n4 char(5) DEFAULT '-',
n5 char(5) DEFAULT '-',
n6 char(5) DEFAULT '-',
n7 char(5) DEFAULT '-',
Exame1 char(5) DEFAULT '-',
Exame2 char(5) DEFAULT '-',
Exame3 char(5) DEFAULT '-',
NFinal char(5) DEFAULT '-',
Numero int NOT NULL,
nome char(30),
PRIMARY KEY(ID_Notas),
FOREIGN KEY(Numero) REFERENCES Alunos(Numero),
FOREIGN KEY(nome) REFERENCES Disciplinas(nome));
 
Boas,

Corri o teu código e ele criou bem as tabelas..... não deu erro nenhum....

Mas se lhe continua a criar erro, porque não cria um campo ID para a tabela disciplinas e definir este ID como sendo a chave primária dessa tabela e mudar então a chave forasteira na tabela Notas.
Não entendo porque usa dois campos na tabela disciplinas para definir a chave primária, poderia simplificar, a menos que seja uma tabela de relação e tenha visto necessidade nesse facto! Na minha opinião, simplificaria muito criar um campo chave-primária do tipo numérico, auto-increment!
 
"

Boas,

Corri o teu código e ele criou bem as tabelas..... não deu erro nenhum....

Mas se lhe continua a criar erro, porque não cria um campo ID para a tabela disciplinas e definir este ID como sendo a chave primária dessa tabela e mudar então a chave forasteira na tabela Notas.
Não entendo porque usa dois campos na tabela disciplinas para definir a chave primária, poderia simplificar, a menos que seja uma tabela de relação e tenha visto necessidade nesse facto! Na minha opinião, simplificaria muito criar um campo chave-primária do tipo numérico, auto-increment!

Infelizmente não posso mudar pois a tabela Disciplinas "constrói" um menu dinâmico, e preciso do campo child id como auto increment e consequentemente como chave primária. Daí ter colocado o nome como chave primária também só para ver se o erro desaparecia mas nem assim. Será que é um bug do WAMPP ? É que penso que no LAMPP que uso no linux consigo criar esta tabela.
 
Infelizmente não posso mudar pois a tabela Disciplinas "constrói" um menu dinâmico, e preciso do campo child id como auto increment e consequentemente como chave primária. Daí ter colocado o nome como chave primária também só para ver se o erro desaparecia mas nem assim. Será que é um bug do WAMPP ? É que penso que no LAMPP que uso no linux consigo criar esta tabela.

Exacto, parece que funciona mesmo. Não terá relacionado com o facto de no LAMPP o type estar definido (default) como MyIsam e no WAMPP InnoDB ? Não faço ideia em que medida isto afecta a base de dados, daí perguntar.

EDIT: Pois, configurei .ini para default = MyIsam, e de facto já deu, por isso resta perguntar? Qual deverei eu usar? Pelo que li, INNODB é mais virado para integridade e relacionamentos (que é o que eu mais tenho e preciso), e MyISAM para performance. Devo portanto (se quiser mesmo estas duas tabelas assim) criá-las para MyISAM e o resto em INNODB ?
 
Última edição:
Back
Topo