Relações no PhpMyAdmin

Tsunamy_boy

Banido
Como faço relações a tabelas com o PhpMyAdmin?
Onde existe essa opção, e se é que existe...
A versão que tenho vem com o xammp e é a versão 2.11.3 (ultima axo)
 
só relaccionas as tabelas na altura de fazer as querys. se já sabes a sintaxe (SELECT ... FROM ... WHERE ...) fica fácil
só tens que adicionar uma comparação no WHERE entre os campos chaves das tabelas que queres relacionar

ex:
Código:
SELECT *
FROM nomes, moradas
WHERE nomes.cod_nome=moradas.cod_nome

depois, acrescentas a comparações que precisares para filtrar os dados, tipo nomes.cod_nome=1


ou então usas INNER JOIN

ex:
Código:
SELECT *
FROM nomes INNER JOIN moradas
ON nomes.cod_nome=moradas.cod_nome

neste caso, é como teres uma junção dessas duas tabelas numa só

penso que se usa mais o INNER JOIN mas eu habituei-me a fazer as relações com o WHERE. são hábitos...



depois também há o LEFT JOIN e o RIGHT JOIN.
com o INNER JOIN ou o WHERE, só mostra os registos que aparecem nas duas tabelas (ex: so mostra o cod_nome quando ele existe na tabela nomes e na moradas. se nao houver correspondencia, esse registo nao aparece).
com o LEFT JOIN mostra todos os registos da tabela da esquerda mesmo que não tenha correspondente na direita, e vice-versa para o RIGHT JOIN
não sei se me fiz entender bem. qualquer duvida, avisa.
 
não quero consultas quero relações entre uma tabela e outra por chave externa, para dar um erro quando tentar eliminar um registo que já tem ID noutra tabela, é isso… tipo foreignkey… mas sem ter que fazer isto por código… e para mais eu já experimentei por código e mesmo assim posso eliminar o registo que tem relação noutra tabela.
 
Última edição pelo moderador:
Não sei se podes fazer isso, mais fácil fazer como ele disse, procuras, se o numero de resultados for maior que 0, é porque existe.
 
Por exemplo:
Código:
CREATE TABLE tabPai (
   idpai INT NOT NULL,
   nome VARCHAR(255) NOT NULL,
   PRIMARY KEY (idpai)
) ENGINE=INNODB;

CREATE TABLE tabFilho (
   idfilho INT,
   pai_id INT,
   INDEX pai_index (pai_id),
   [B]FOREIGN KEY (pai_id) REFERENCES tabPai(idpai) ON DELETE CASCADE[/B]
) ENGINE=INNODB;
 
slack_guy, isso o que faz é apagar automaticamente os registos da tabFilho quando os correspondentes da tabPai são apagados.
acho que o que ele é precisamente o contrário, não deixar que ele seja apagado quando existe um registo relacionado noutra tabela

bom, se existe o DELETE CASCADE não me admiro se também houver alguma coisa para impedir de apagar, mas a unica maneira que eu conheço é mesmo fazer uma query para procurar o registo na outra tabela, e se nao encontrar correspondente, executa a query para apagar
 
slack_guy, isso o que faz é apagar automaticamente os registos da tabFilho quando os correspondentes da tabPai são apagados.
acho que o que ele é precisamente o contrário, não deixar que ele seja apagado quando existe um registo relacionado noutra tabela

bom, se existe o DELETE CASCADE não me admiro se também houver alguma coisa para impedir de apagar, mas a unica maneira que eu conheço é mesmo fazer uma query para procurar o registo na outra tabela, e se nao encontrar correspondente, executa a query para apagar
tem lá tudo
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
 
o "DELETE CASCADE" serve para apagar em cadeia? tipo tudo o que tiver abaixo dessa tabela é apagado?
é que se for serve perfeitamente

o delete on cascade serve para quando a chave estrangeira deixar de existir (na tabela das chaves estrangeiras) aqueles registos serem todos apagados.

O problema deste post começou quanto te começaram a explicar coisas para o PhpMyAdmin, quando na verdade te deviam ter educado e ensinado que o que tu querias saber é MySQL...

Já agora há 1 fórum sobre programação ;)
 
O problema deste post começou quanto te começaram a explicar coisas para o PhpMyAdmin,
Pela minha parte, percebi perfeitamente o que o OP procura no phpMyAdmin. E o que ele procura não existe (ou pelo menos não existia até há 2 anos atrás quando deixei de o usar).

Ele procura uma forma de, por meio de 'point&click' e 'drag&drop' construir as relações entre tabelas - deve ser qualquer coisa parecida com o que a MS tem para o MSSQL Server.
Já vi aplicações Livres para isso mas não tenho links. É uma questão de procurar em www.freshmeat.net, www.sf.net e, por fim, www.google.pt .
 
o delete on cascade serve para quando a chave estrangeira deixar de existir (na tabela das chaves estrangeiras) aqueles registos serem todos apagados.

O problema deste post começou quanto te começaram a explicar coisas para o PhpMyAdmin, quando na verdade te deviam ter educado e ensinado que o que tu querias saber é MySQL...

Já agora há 1 fórum sobre programação ;)

a duvida não é de programação mas sim de phpmyadmin(como sabes é um site onde constróis a base de dados)
quanto ao slack_guy sim a minha duvida é exactamente essa
mas quanto ao "
DELETE CASCADE" ja ajuda
 
faz o download das MySQL GUI tools.

Tem o MySql Administrator que é bom para fazer graficamente o que queres.

Não tem 'point&click' e 'drag&drop' mas dá para utilizar
a interface gráfica para construir esse tipo de keys, indices e relações,
que sempre é mais agradável que o 'modo texto'.
 
faz o download das MySQL GUI tools.

Tem o MySql Administrator que é bom para fazer graficamente o que queres.

Não tem 'point&click' e 'drag&drop' mas dá para utilizar
a interface gráfica para construir esse tipo de keys, indices e relações,
que sempre é mais agradável que o 'modo texto'.


onde arranjo?
 
a duvida não é de programação mas sim de phpmyadmin(como sabes é um site onde constróis a base de dados)
quanto ao slack_guy sim a minha duvida é exactamente essa
mas quanto ao "
DELETE CASCADE" ja ajuda

O phpMyAdmin é um cliente de SQL... como há aplicações que dá para ter no PC que fazem exactamente o mesmo... Eu como no php my admin insiro SQL á lá pate...
 
Back
Topo