Deleu 0 Denunciar post Postado Dezembro 31, 2010 Fui criar uma integridade entre duas tabelas e acabei com duas dúvidas: 1. Antes a tabela estava em MyISAM e quem 'cuidava da integridade' era o PHP. Porém isso não lhe garante segurança se eu for lá na segunda tabela e deletar alguma coisa (a primeira tabela vai ficar com o ID que não existe). Bom, isso todo mundo aqui sabe, direto ao ponto: criando um exemplo: Tabela pessoa: id, nomePessoa, carro_id... Tabela carro: id, marca, modelo... Ao cadastrar uma nova pessoa, ela é obrigada a ter um carro, então deixei o campo 'carro_id' como not null default 1 (todas as pessoas têm pelo menos o carro 1). Quando alterei a engenharia para InnoDB e fui criar a integridade, me deparei com as seguintes interessantes situações: UPDATE pessoa SET carro_id = null; Quando eu fiz isso, achei que todas as pessoas passariam a ter o carr 1 (já que não permiti valores nulos e o default é 1), mas o que aconteceu foi que ao invés de 1, tudo ficou 0. Se é default, não deveria assumir esse valor quando eu setasse null ? Enfim, o que eu quero é o seguinte: Registrando uma nova pessoa, o carro_id tem que ser 1 (default). Se a pessoa adquirir o carro 5 e em algum dia o carro 5 for deletado, então ela retorna ao carro 1. Esse campo NUNCA poderá ser NULO ou 0, terá que ser de algum carro existente OU 1. O carro 1 NUNCA será deletado. Any help? :D Compartilhar este post Link para o post Compartilhar em outros sites
Eliseu M. 2 Denunciar post Postado Dezembro 31, 2010 Estranho, deveria dar um erro quando tentasse executar esse UPDATE, pois o campo não pode ser NULL. Podemos ver a estrutura de sua tabela? Dê um EXPORT, daí tudo fica mais detalhado com o script de criação. Compartilhar este post Link para o post Compartilhar em outros sites
Deleu 0 Denunciar post Postado Dezembro 31, 2010 DROP TABLE IF EXISTS `tb_usuarios`; CREATE TABLE `tb_usuarios` ( `id` int(11) NOT NULL auto_increment, `email` varchar(200) NOT NULL, `usuario` varchar(255) NOT NULL, `senha` text NOT NULL, `level` int(11) NOT NULL default '1', `tripulacao` int(11) NOT NULL default '0', `ouros` int(11) NOT NULL default '0', `atk_c` int(11) NOT NULL default '3', `def_c` int(11) NOT NULL default '4', `expatu` int(11) NOT NULL default '0', `expnext` int(11) NOT NULL default '100', `bandeira` varchar(255) default NULL, `quantidade` int(11) NOT NULL default '0', `atacou` int(11) NOT NULL default '0', `data_ataque` date default NULL, `barco` int(11) NOT NULL default '1', `navegando` smallint(1) NOT NULL default '0', `vitorias` int(11) NOT NULL default '0', `derrotas` int(11) NOT NULL default '0', `cla` smallint(1) NOT NULL default '2', `user_maxhp` int(11) NOT NULL default '50', `user_currenthp` int(11) NOT NULL default '50', `data_nasc` varchar(255) default NULL, `nome_barco` varchar(255) default NULL, `mensagem` mediumtext, `sexo` int(11) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; # # Dumping data for table tb_usuarios # INSERT INTO `tb_usuarios` VALUES (23,'rodrigoalcab@gmail.com','Lelouch','e10adc3949ba59abbe56e057f20f883e',17,13,19227,20,19,74368288,14309837,'e3b2f1d11e15f0914e8148305990f3f7.jpg',274,0,'2010-12-30',9,0,46,88,1,1286,85,'28/03/1989','Queen C.C','٠•●●●●●◙ஜ۩۞۩ஜ◙●●●●●•٠<br>\n<br>\nUm navio não é velas, casco, etc, isso é o que um navio precisa. O que um navio é, o que um navio realmente é : é liberdade.<br>\n<br>\n٠•●●●●●◙ஜ۩۞۩ஜ◙●●●●●•٠',0); Estrutura + 1º Registro. Estou trabalhando em parceria com outra pessoa, a coluna a qual eu quero adicionar integridade é a coluna `barco`. Eu tinha renomeado ela para barcos_id e depois executei o seguinte script: UPDATE `tb_usuarios` SET barcos_id = null; Foi aí que todos os dados viraram 0. Eu esperava que eles virassem 1 (default value). Compartilhar este post Link para o post Compartilhar em outros sites
Eliseu M. 2 Denunciar post Postado Fevereiro 1, 2011 Eu penso que aí o null virou zero, pois você definiu o seu valor. Compartilhar este post Link para o post Compartilhar em outros sites