1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida SGBD

Discussão em 'Web Development' iniciada por Tekker, 14 de Novembro de 2007. (Respostas: 11; Visualizações: 785)

  1. Tekker

    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!
     
  2. Demio

    Demio Power Member

    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 ;)
     
  3. Poiel

    Poiel Power Member

    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.
     
  4. Demio

    Demio Power Member

  5. slack_guy

    slack_guy Power Member

    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: 14 de Novembro de 2007
  6. Tekker

    Tekker Power Member


    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!
     
  7. Tekker

    Tekker Power Member

    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 :)
     
  8. slack_guy

    slack_guy Power Member

    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: 14 de Novembro de 2007
  9. AliFromCairo

    AliFromCairo Power Member

    Podes sempre criar um trigger em que lanças uma excepção se os dados que estás a introduzir já existirem nas outras tabelas.
     
  10. spastikman

    spastikman Banido


    Exactamente. Caso estejas a usar a versão 5 do mysql, já tens suporte para triggers que podem executar essa verificação ANTES de actualizar qualquer dado numa das tabelas.
     
  11. LinuxWarrior

    LinuxWarrior Power Member

    Basta adicionares o campo UNIQUE...
    E deixa o resto, porque o SGDB sabe melhor do que tu, como fazer isso...
    :D
     
  12. saunde

    saunde Power Member

    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.
     

Partilhar esta Página