Dúvida SGBD

Tekker

Power Member
Vivam,

Estou a desenvolver uma aplicação em PHP e a usar o MySQL.

tenho três tabelas, em que cada uma delas tem dois campos login e passwd, e eu quero forçar a que a base de dados, ao inserir estes dados numa das tabelas, verifique se o login já existe nas duas tabelas restantes (não podem existir logins repetidos). Já estive a ver e parece que o MySQL não suporta este tipo de operações. De qualquer forma, gostaria de umas luzes sobre o que fazer, e que SGBD's suportam isto.

Obrigado!
 
Não podes obrigar a base de dados a fazer isso, mas podes fazer com que o script de PHP faça isso quando estás a inserir as coisas ;)
 
Não podes obrigar a base de dados a fazer isso, mas podes fazer com que o script de PHP faça isso quando estás a inserir as coisas ;)

Não?????

Claro que podes, crias um procedimento para fazer um select às outras duas tabelas, no caso de algum select devolver linhas, é porque já exite.
 
Uma possibilidade é teres uma tabela que junte os 'logins' das outras 3, com um campo 'login' UNIQUE ou PRIMARY. Ou uma VIEW que junte os 'logins' das 3 tabelas, onde fazes um SELECT para saber se existe duplicado.
 
Última edição:
Uma possibilidade é teres uma tabela que junte os 'logins' das outras 3, com um campo 'login' UNIQUE ou PRIMARY. Ou uma VIEW que junte os 'logins' das 3 tabelas, onde fazes um SELECT para saber se existe duplicado.


OK, todas estas respostas já me deram uma luz sobre o que fazer :)

Penso que com o MySQL dá para fazer constraints nas VIEWS, pelo que penso que basta fazer uma check após a inserção numa das tabelas para verificar se existem valores duplicados... Vou investigar um pouco.

Obrigado!
 
Ok, já estive a ver. O problema que tenho é que, ao tentar fazer uma inserção numa das tabelas, tenho que a impedir se o campo login já existir numa das outras duas... E isso eu não estou a ver como posso fazer. Já tenho a VIEW feita, que junta os tres campos...

A unica solução seria, na aplicação, antes de fazer o INSERT, fazer um SELECT COUNT na VIEW.. Penso que vou por aí.

Enfim, limitações do MySQL...

Obrigado a todos :)
 
Enfim, limitações do MySQL...

Porque é que não dizes o que, na tua opinião, seria o método mais adequado?

Já te deixei uma dica: cria uma tabela com os logins existentes nas outras, com um campo 'login' que seja PRIMARY ou UNIQUE. Antes de gravares numa das outras tabelas, gravas 1º nesta. Se ele falhar, é porque há duplicado. Como tratar o erro? isso deixo à tua imaginação.
 
Última edição:
A melhor solução é um trigger instead of insert ... em que a cada insert é despoletado o trigger e depois podes fazer o código de teste..

P.S. Eu conheço isto do SQL SERVER 2005 .. n sei se o mySql tem.
 
Back
Topo