resolvam, ERROR 1005, sem solução.

1. resolvam, ERROR 1005, sem solução.

Durval S. Cordeiro Jr.
dscj.tec

(usa Conectiva)

Enviado em 05/12/2007 - 16:49h

Olá pessoal,

Tô com um problemão no MySQL 5.0. Ele dá pau na hora de criar uma certa tabela(tbtemas). Já chequei os indices, chequei os tipos de dados, acho que verifiquei tudo... mas não resolveu nada. Todas são InnoDB.

Criei as tabelas utilizando o DBDesigner 4 para modelar e dele gerei o código(script) pro MySQL. Chequei o script e não vejo o erro.

Em todos os sites e foruns que entro sempre verifico que os problemas em sua maioria se voltam a não criação de um indice para as FKs. Acontece que o próprio DBDesigner já cria o indice e não vi erro no script com relação a isso.

Eis as tabelas:

CREATE TABLE tbusuarios (
idusuarios INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nome VARCHAR(50) NOT NULL,
contlogins INTEGER UNSIGNED NULL,
conttemasvisit INTEGER UNSIGNED NULL,
foto VARCHAR(20) NULL,
nivelusuario INTEGER UNSIGNED NULL DEFAULT 1,
matricula VARCHAR(20) NULL,
email VARCHAR(30) NULL,
menupendentes INTEGER UNSIGNED NULL DEFAULT 1,
menunovos INTEGER UNSIGNED NULL DEFAULT 1,
senha VARCHAR(8) NOT NULL,
rg INTEGER UNSIGNED NULL,
nascimento DATE NOT NULL,
pergunta VARCHAR(70) NOT NULL,
resposta VARCHAR(40) NOT NULL,
datacadastro DATE NULL,
dataultimologin DATE NULL,
recado1 MEDIUMBLOB NULL,
recado2 MEDIUMBLOB NULL,
recado3 MEDIUMBLOB NULL,
Curso VARCHAR(20) NULL,
Turno VARCHAR(4) NULL,
PRIMARY KEY(idusuarios)
)
TYPE=InnoDB;

CREATE TABLE tbtemas (
idtemas INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
tbusuarios_idusuarios INTEGER UNSIGNED NOT NULL,
titulo VARCHAR(200) NOT NULL,
resumo MEDIUMBLOB NULL,
area VARCHAR(40) NULL,
subarea VARCHAR(40) NULL,
contemanexo VARCHAR(3) NULL,
autor VARCHAR(50) NOT NULL,
palavraschave VARCHAR(80) NULL,
tipo VARCHAR(15) NULL,
contvisitas INTEGER UNSIGNED NULL,
divulgador VARCHAR(50) NULL,
nota INTEGER UNSIGNED NOT NULL DEFAULT 0,
dataadd DATE NULL,
exibir INTEGER UNSIGNED NULL DEFAULT 1,
PRIMARY KEY(idtemas, tbusuarios_idusuarios),
INDEX tbtemas_FKIndex1(tbusuarios_idusuarios),
FOREIGN KEY(tbusuarios_idusuarios)
REFERENCES tbusuarios(idusuarios)
ON DELETE SET NULL
ON UPDATE CASCADE
)
TYPE=InnoDB;


Após tentar criar a tabela tbtemas: "ERROR 1005 (HY000): Can't create table '.\sistematema\tbtemas.frm' (errno: 150)"

Em nenhum lugar da internet encontro a resposta para esse problema.

Alguem pode me ajudar??????????????

Valeu!!!!!



  


2. Re: resolvam, ERROR 1005, sem solução.

Isaque Vieira de Sousa Alves
isaque_alves

(usa Fedora)

Enviado em 05/12/2007 - 17:58h

o problema é especificamente na criação da tabela que contém a chave estrangeira.
No manual, achei essa referência:
http://dev.mysql.com/doc/refman/4.1/pt/innodb-foreign-key-constraints.html

Mas, talvez, vc pudesse resolver isso apenas criando a tabela e depois a alterando para criar a chave estrangeira.


3. Em outras palavras...

Durval S. Cordeiro Jr.
dscj.tec

(usa Conectiva)

Enviado em 06/12/2007 - 15:13h

O MySQL me deixou na mão?
Se não tem jeito de criar a tabela já com as FKs... o MySQL tá bugado.
Olha que é a V. 5.0

Melhor pensar em outras opções.

Que decepção com o MySQL.


4. Re: resolvam, ERROR 1005, sem solução.

Isaque Vieira de Sousa Alves
isaque_alves

(usa Fedora)

Enviado em 06/12/2007 - 15:35h

Não há razão para decepcionar-se...
Você deve reconhecer que o mysql foi criado para trabalhar com uma determinada estrutura, e talvez a sua instrução, não esteja satisfazendo o mysql.
Você deve verificar se os tipos e características das chaves que está indexando correspondem entre si. Preste bastante atenção ao definir chaves numa tabela. Eu sei que vc ja dise ter verificado os indices... mas não resta outra alternativa... sua instrução está incorreta, só não me pergunte onde, pq eu nem analisei direito, só executei pra ver o que aconteceria... pra ver o erro...
Citei uma solução que mais é uma 'gambiarra', pois solucionaria o problema em termos de tempo, mas deixaria lá a causa... ou seja a query...




5. Re: resolvam, ERROR 1005, sem solução.

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 06/12/2007 - 15:39h

O MySQL não lhe deixou na mão, apenas lhe deu outras opções.

Se você quer fazer dessa forma, sem mudar nada, apenas troque de InnoDB para MyISAM.

Se preferir manter InnoDB, leia com atenção o link enviado anteriormente:
http://dev.mysql.com/doc/refman/4.1/pt/innodb-foreign-key-constraints.html

Lá explica como.

Agora dificilmente você vai conseguir fazer o mesmo comando no MS-SQL, Oracle, DB2, MySQL, PostgreSQL... Sem se adaptar, espero que seja capaz de entender isso.

Agora se deseja procurar outras opções, veja o DB2, você provavelmente deve voltar para MySQL em tempo recorde. :)


6. A solução

Leandro
leowalker

(usa Debian)

Enviado em 07/07/2008 - 13:41h

Caros, me deparei com um problema muito parecido, conforme dica acima, alterei oara o tipo MyISAM e funfou bem.... mas fica sem a classe de dependencias ou seja se deletar algo na tabela pai o registro das filhas ainda existirão.


7. Re: resolvam, ERROR 1005, sem solução.

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/07/2008 - 09:45h

Meu caro, seu problema não é sintaxe, mas sim de lógica. Você definiu o campo como não podendo ser null e está definindo a ação de deletar a chave na outra tabela setando ele para null:

Seu erro está aqui:

"...tbusuarios_idusuarios INTEGER UNSIGNED NOT NULL..."
"...ON DELETE SET NULL..."

Mude a linha
"...ON DELETE SET NULL..."
Para

"...ON DELETE RESTRICT..."
Pois um campo q faz referência a uma chave não pode ser null.

E retire a linha:
"INDEX tbtemas_FKIndex1(tbusuarios_idusuarios)"
que o MySQL faz isso automaticamente na definição da chave.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts