Ir ao conteúdo
  • Cadastre-se
mtemporim

Erro no MySql - Socorro

Recommended Posts

Segue abaixo uma criação de tabelas simples, alguem saberia me dize o que esta errado e porque?

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 4 to server version: 5.0.26-community-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database Trabalho

-> ;

Query OK, 1 row affected (0.00 sec)

mysql> use Trabalho;

Database changed

mysql> create table Dept (

-> DepNume integer(4) not null,

-> DepNome varchar(20) not null,

-> DepLoca varchar(20) not null,

-> DepOrca integer(12),

-> primary key (DepNume)

-> );

Query OK, 0 rows affected (0.03 sec)

mysql> create table Emp (

-> EmpNume integer(4) not null,

-> EmpNome varchar(30) not null,

-> EmpGere integer(5),

-> EmpServ varchar(20),

-> DepNume integer(4) not null,

-> EmpAdmi date,

-> EmpSala integer(10),

-> EmpComi integer(10),

-> primary key (EmpNume),

-> foreign key (DepNume) references Dept on delete restrict on update cascad

e

-> );

ERROR 1005 (HY000): Can't create table '.\trabalho\emp.frm' (errno: 150)

mysql>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá, dê uma lida nesse link, para esclarecer o que é....

Para criar chave estrangeira, as duas tabelas tem que ser do tipo INNODB

ENGINE=INNODB,

verifique isso

Primeiramente quero te agradecer por se oferecer a ajudar, tentei criar as tabelas como InnoDB, mas apenas a primeira foi, da uma olhada por favor..

mysql> create database Trabalho;

Query OK, 1 row affected (0.00 sec)

mysql> use Trabalho

Database changed

mysql> create table Dept (

-> DepNume integer(4) not null,

-> DepNome varchar(20) not null,

-> DepLoca varchar(20) not null,

-> DepOrca integer(12),

-> primary key (DepNume)) Type = InnoDB;

Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> create table Emp (

-> EmpNume integer(5) not null,

-> EmpNome varchar(30) not null,

-> EmpGere integer(5),

-> EmpServ varchar(20),

-> DepNume integer(4) not null,

-> EmpAdmi date,

-> EmpSala integer(10),

-> EmpComi integer(10),

-> primary key (EmpNume),

-> foreign key has (DepNume) references Dept on delete restrict on update ca

scade) Type = InnoDB;

ERROR 1005 (HY000): Can't create table '.\trabalho\emp.frm' (errno: 150)

mysql>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, compare e veja onde errou ^^

create table Dept (
DepNume integer(4) not null,
DepNome varchar(20) not null,
DepLoca varchar(20) not null,
DepOrca integer(12),
primary key (DepNume)
) ENGINE = INNODB;

create table Emp (
EmpNume integer(4) not null,
EmpNome varchar(30) not null,
EmpGere integer(5),
EmpServ varchar(20),
DepNume integer(4) not null,
EmpAdmi date,
EmpSala integer(10),
EmpComi integer(10),
primary key (EmpNume),
CONSTRAINT pk_nameaaaa foreign key (DepNume) references Dept(DepNume) on delete restrict on update cascade) ENGINE = INNODB;

Uma maneira de você ver onde errou também, é usando o comando

SHOW ENGINE INNODB STATUS;

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá, compare e veja onde errou ^^

create table Dept (
DepNume integer(4) not null,
DepNome varchar(20) not null,
DepLoca varchar(20) not null,
DepOrca integer(12),
primary key (DepNume)
) ENGINE = INNODB;

create table Emp (
EmpNume integer(4) not null,
EmpNome varchar(30) not null,
EmpGere integer(5),
EmpServ varchar(20),
DepNume integer(4) not null,
EmpAdmi date,
EmpSala integer(10),
EmpComi integer(10),
primary key (EmpNume),
CONSTRAINT pk_nameaaaa foreign key (DepNume) references Dept(DepNume) on delete restrict on update cascade) ENGINE = INNODB;

Uma maneira de você ver onde errou também, é usando o comando

SHOW ENGINE INNODB STATUS;

Agora deu certo, muito obrigado Erciley pela paciencia, e ja abusando dela, você poderia me responder algumas duvidas?

eu estava definindo (DepNume) como chave estrangeira e referenciando ela na tabela Dept mas não estava especificando qual atributo era pra ser referecniado.

O que eu estava errando"

foreign key (DepNume) references Dept

O certo é

foreign key (DepNume) references Dept(DepNume)

Correto?

Mais duas coizinhas

Pra que serve o "CONSTRAINT" e o "pk_nameaaaa", eu fiz com e sem eles deu certo da mesma forma.

Agradecendo mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pergunta 1:

Correto, você referenciou a tabela mas não colocou o campo...

Pergunta 2:

Toda chave criada, estrangeira, PK, índice, gera um nome de chave. Nesse casso, eu defini o nome que seria, apenas por teste, mas pode retirar, escrevi qq coisa aqui ^^

Complementando: Constraint é uma cláusula para você definir o nome da chave (nome que coloquei: pk_nameaaaa), cláusula essa que pode ser omitida. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×