Ir ao conteúdo
  • Cadastre-se

Erro no MySql - Socorro


Visitante: mtemporim

Posts recomendados

Visitante: mtemporim
 

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>

Link para o comentário
Compartilhar em outros sites

Visitante: mtemporim
 
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>

Link para o comentário
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;

Link para o comentário
Compartilhar em outros sites

Visitante: mtemporim
 
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

Link para o comentário
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. =)

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...