Ir para conteúdo

Arquivado

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

Rodrigo Alexsandro

PHPmyadmin e chaves estrangeiras

Recommended Posts

Olá a todos.

Estou com uma dúvida.

Ao exportar um determinado banco de dados para outro servidor, gerei os sqls com estrutura, views e dados de cada tabela do referido banco.

Ao testar os arquivos aqui antes de enviar para o servidor de produção, não me foi mostrado nenhum erro a respeito das referências e restrições das chaves estrangeiras. Ex:

ADD CONSTRAINT `caixa_ibfk_1` FOREIGN KEY (`codServBox`) REFERENCES `servicos_processo` (`codServ`) ON UPDATE CASCADE

Nessa foreing, mando o campo codServBox da tabela caixa, referenciar o campo codServ da tabela servicos_processo, logo cada registro na tabela caixa, deveria ter um código de serviço que existisse na tabela servicos_processo.

O estranho é. Ao exportar para o servidor de produção, feliz por não ter gerado nenhum erro nos testes, sou informado que existem erros nas chaves envolvendo estas tabelas.

Volto ao mesmo banco de dados que fiz os testes e seleciono os campos codServBox que não existissem na tabela servicos_processos e encontro um código de serviço que foi inserido na tabela caixa mas não existe na tabela servicos_processo, mesmo com a constraint acima criada.

Resumindo, onde está o erro que permitiu, mesmo com uma constraint, inserir um registro com referência inexistente na tabela referenciada pela constraint?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por een7oo
      Eu uso a prestashop e hospedo meu dominio na uolhost, e eu precisava acessar meu banco de dados mas não lembrava a senha e então pela plataforma da uol eu troquei a minha senha do phpMyAdmin. Acontece que agora quando entro no meu site ele aparece essa mensagem de que não foi possivel estabelecer uma conexão com o banco de dados, acredito eu que é porque as senhas não coincidem, então como faço para saber a senha que está no php para colocar a mesma na uol ou como troco a senha do php, qual forma é mais fácil? Sou novo em programação e ainda estou conhecendo e aprendendo a manusear o phMyAdmin, portanto peço que me ajudem com isso e eu serei imensamente grato a voces, vou deixar o link do site aqui.


      http://www.primeadesivos.com.br/loja
       
    • Por Duilio Gomes Pereira
      Olá!
      Tenho um bando de dados com mais de 21 mil usuários do wordpress. Como faço para deletar no Phpmyadmin e deixar apenas 2 usuários?
      Obrigado!
    • Por Junior SAIZO
      Estou com uma duvida na qual não obtive solução. Tenho um objeto Array values e um array status, onde eu quero relacionar os índices do objeto Array values aos indices do array status. De modo que eu possa escrever um teste lógico onde: Se o indice 0 do objeto Array values for diferente de null (ou seja, contém valor), então o indice 0 do array status receberá o valor '1'.
      OU 
      Se o indice 1 do objeto Array values for diferente de null (ou seja, contém valor), então o indice 1 do array status receberá o valor 1.
       
      Por exemplo, antes do teste lógico:
      values:[ 0 => [ 0 => "1,02" 1 => "2,032" 2 => "32,01" 3 => "0,021" ] 1 => [ 0 => "null" 1 => "null" 2 => "8,258" 3 => "1,021" ] 2 => [ 0 => "4,021" 1 => "6,258" 2 => "null" 3 => "10" ] ] status:[ 0 => "0" 1 => "0" 2 => "0" ] Após o teste lógico:
       
      status:[   0 => "1"   1 => "0"   2 => "0" ] Neste exemplo só o indice 0 do array status recebeu o valor "1", porque APENAS o array 0 do objeto Array values tinha valores diferente de null.
       
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      O array status sempre terá o mesmo número de índices que o objeto Array values terá de arrays (Se array status tem 5 indices (0, 1, 2, 3, 4), o objeto Array value terá 5 arrays (0, 1, 2, 3, 4)). Além disso o array status sempre iniciará com os valores do indice igual a '0'. E se os valores dos indices do objeto values forem TODOS diferentes de null, cada indice do array status receberá o valor '1'.
       
      Exemplificando:

       
      <?php status:[   0 => "1",   1 => "1",   2 => "1", ] ?>  
       
      Em outro fórum obtive a seguinte resposta:
       
      <?php $aValues = [ 0 => [ 0 => "1,023" , 1 => "0,023" , 2 => "5,023" , 3 => "1" ], 1 => [ 0 => null , 1 => null , 2 => "5" , 3 => "1,87" ], 2 => [ 0 => "null" , 1 => null , 2 => null , 3 => null ] ]; $aStatus = [ 0 => 0 , 1 => 0 , 2 => 0 ]; foreach ($aValues as $chave => $values) { $status = 1; foreach ($values as $value) { // se tiver qquer valor null status recebe 0 if ($value == null) { $status = 0; break; } } $aStatus[$chave] = $status; } echo '<pre>'; print_r($aStatus); ?> Porém, quando eu executo o código NÂO é me retornado o array status com os indices com valores "0" ou "1", me retorna apenas uma nova chave FORA do array status com algum valor "0" ou "1". Tentei modificar o código ou tentar uma abordagem diferente, mas sem resultado. Vou inserir uma imagem para melhor compreensão do que o código me retorna.
       
       
      Espero ter sido claro na minha dúvida.  
      Desde já, agradeço.

    • Por Quencyjones79
      Olá a todos, sou novo na área de multimídia. Estou a seguir a um momento um ebook sobre a criação de uma base de dados e também a criação de tabelas. Mas quando vinculei as tabelas do banco de dados, no phpmyadmin me deu alguns erros. Fiz a correspondência da chave primária (artist_id da tabela Artist) com a artist_id da tabela Prints (chave estrangeira) e assim por diante. O problema é que ele não mostra minhas relações das tabelas e me dá uma mensagem de erro. Então, alguns de vocês poderiam me ajudar, por favor, a consertar esta situação. Eu serei grato. Cumprimentos.
       
      Ps .: Abaixo envio o arquivo Sql.
       
      Atentamente,

      José Moreira
      -- phpMyAdmin SQL Dump -- version 5.0.2 -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 -- Generation Time: Jan 07, 2021 at 08:49 PM -- Server version: 10.4.14-MariaDB -- PHP Version: 7.2.33 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Database: `ecommerce` -- -- -------------------------------------------------------- -- -- Table structure for table `artists` -- CREATE TABLE `artists` ( `artist_id` int(10) UNSIGNED NOT NULL, `first_name` varchar(20) DEFAULT NULL, `middle_name` varchar(20) DEFAULT NULL, `last_name` varchar(40) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; -- -------------------------------------------------------- -- -- Table structure for table `customers` -- CREATE TABLE `customers` ( `customer_id` int(10) UNSIGNED NOT NULL, `email` varchar(60) NOT NULL, `pass` char(40) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; -- -------------------------------------------------------- -- -- Table structure for table `orders` -- CREATE TABLE `orders` ( `order_id` int(10) UNSIGNED NOT NULL, `customer_id` int(10) UNSIGNED NOT NULL, `total` decimal(10,2) UNSIGNED NOT NULL, `order_date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -------------------------------------------------------- -- -- Table structure for table `order_contents` -- CREATE TABLE `order_contents` ( `oc_id` int(10) UNSIGNED NOT NULL, `order_id` int(10) UNSIGNED NOT NULL, `print_id` int(10) UNSIGNED NOT NULL, `quantity` tinyint(3) UNSIGNED NOT NULL DEFAULT 1, `price` decimal(6,2) UNSIGNED NOT NULL, `ship_date` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- -------------------------------------------------------- -- -- Table structure for table `prints` -- CREATE TABLE `prints` ( `print_id` int(10) UNSIGNED NOT NULL, `artist_id` int(10) UNSIGNED NOT NULL, `print_name` varchar(60) NOT NULL, `price` decimal(6,2) UNSIGNED NOT NULL, `size` varchar(60) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, `image_name` varchar(60) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; -- -- Indexes for dumped tables -- -- -- Indexes for table `artists` -- ALTER TABLE `artists` ADD PRIMARY KEY (`artist_id`), ADD UNIQUE KEY `full_name` (`last_name`,`first_name`,`middle_name`); -- -- Indexes for table `customers` -- ALTER TABLE `customers` ADD PRIMARY KEY (`customer_id`), ADD UNIQUE KEY `email` (`email`), ADD KEY `login` (`email`,`pass`); -- -- Indexes for table `orders` -- ALTER TABLE `orders` ADD PRIMARY KEY (`order_id`), ADD KEY `customer_id` (`customer_id`), ADD KEY `order_date` (`order_date`); -- -- Indexes for table `order_contents` -- ALTER TABLE `order_contents` ADD PRIMARY KEY (`oc_id`), ADD KEY `order_id` (`order_id`), ADD KEY `print_id` (`print_id`), ADD KEY `ship_date` (`ship_date`); -- -- Indexes for table `prints` -- ALTER TABLE `prints` ADD PRIMARY KEY (`print_id`), ADD KEY `artist_id` (`artist_id`), ADD KEY `print_name` (`print_name`), ADD KEY `price` (`price`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `artists` -- ALTER TABLE `artists` MODIFY `artist_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `customers` -- ALTER TABLE `customers` MODIFY `customer_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `orders` -- ALTER TABLE `orders` MODIFY `order_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `order_contents` -- ALTER TABLE `order_contents` MODIFY `oc_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `prints` -- ALTER TABLE `prints` MODIFY `print_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
       

    • Por sirrocha
      Pessoal, tenho duas tabelas. Uma se chama prestacoes e a outra despesas.
      Cada prestação criada gera um id_prestacao que é único para cada uma gerada. Dentro da tabela despesas, se eu registro, por exemplo, 4 despesas, ficarão:
       
      id_prestacao = 1, 1, 1, 1
      id_despesa = 1, 2, 3, 4
       
      -> Cada despesa tem um valor, ao qual está na tabela despesas com o nome precoDespesa.
       
      -> O que eu gostaria é de poder, na tabela prestacoes, somar o valor destas despesas e colocar na coluna "valor_total" para cada id_prestacao gerado.
       
      Qual seria a maneira mais adequada de fazer isto, e que eu poderia compreender a estrutura criada para fazer essa "filtragem"
       
      UPDATE prestacoes SET valor_total = (
          SELECT SUM(precoDespesa) FROM despesas
          ORDER BY id_prestacao
      )
       
      Na tabela despesas, tenho atualmente
      id_prestacao - id_despesa - Valor
      1 - 1 - 30
      1 - 2 - 40
      1 - 3 - 30
       
      Com essa tentativa, vamos supor que tenho a tabela prestações:
      id_prestacao - projeto - ValorTotal
      1 - Projeto A - 100 
      2 - Projeto B - 100
      3 - Projeto C - 100
       
      Ou seja, o valor total do somatório para o id_prestação está vindo como 100 (até ai tudo bem), porém não está filtrando na tabela prestações onde deve ser colocado. O 100, nesse caso, deveria ficar apenas na primeira linha, sendo os valores totais de B e C igual a 0.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.