Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31

    [MySQL] Problema con check

    Buongiorno a tutti
    Ho un problema con una check nella creazione di una tabella. Da ben 2 ore provo a spremermi le meningi ma non ne son venuto a capo. Spero che possiate darmi qualche consiglio
    Allora il vincolo deve prevedere che non ci siano più di due persone con stesso nome e cognome nella tabella. la tabella l'ho fatta così:
    codice:
    create table persona(
    id int not null auto_increment primary key,
    nome varchar(20), 
    cognome varchar (20),
    anno_di_nascita int,
    indirizzo varchar(30),
    check( (nome, cognome) = (select nome,cognome from persona p where nome = p.nome and cognome = p.cognome))
    );
    Se lancio questa query mi dice che la tabella assicurazioni.persona non esiste. Ma non capisco, io non la sto creando ora questa tabella? Secondo me dipende dal check.
    Confido in qualche risposta, grazie e buona giornata

  2. #2
    non puoi mettere semplicemente una chiave unica sulla coppia (nome,cognome)?

    ciao

  3. #3
    purtoppo il check in mySQL non esiste, accetta e non dà errore sulla sintassi ma è come se non ci fosse!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31
    Originariamente inviato da automatic_jack
    non puoi mettere semplicemente una chiave unica sulla coppia (nome,cognome)?

    ciao
    ciao
    Il problema è che se metto una chiave unica allora non posso avere 2 persone con stesso nome e cognome, ma solo una.

    Originariamente inviato da Falko Tux
    purtoppo il check in mySQL non esiste, accetta e non dà errore sulla sintassi ma è come se non ci fosse!
    ciao
    Qui il problema è che anche la sintassi dà un errore! Mi dice che la tabella non esiste, che in parte è vero perchè è un vincolo che sto specificando in fase di creazione della tabella stessa, quindi a rigor di logica non fa una piega. Solo che in tutti gli esempi che ho visto è possibile inserire una query select/from/where all'interno delle definizioni del vincolo check, specificando nel from la tabella stessa.

  5. #5
    Originariamente inviato da FalkoTux
    purtoppo il check in mySQL non esiste, accetta e non dà errore sulla sintassi ma è come se non ci fosse!
    sinceramente non so le MyISAM, ma sulle inno db è una cosa che uso abbastanza spesso

    EDIT: pardon, ho letto un pezzo di un post e l'ho confuso con un altro ... mi riferivo all'uso della chiave combinata, non al check di per se
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31
    Originariamente inviato da daniele_dll
    sinceramente non so le MyISAM, ma sulle inno db è una cosa che uso abbastanza spesso
    La mia tabella è InnoDB chiaramente

  7. #7

    Re: [MySQL] Problema con check

    Originariamente inviato da Xanakro
    .
    .
    .
    Se lancio questa query mi dice che la tabella assicurazioni.persona non esiste. Ma non capisco, io non la sto creando ora questa tabella? Secondo me dipende dal check.
    Confido in qualche risposta, grazie e buona giornata
    come semplice escamotage, per capire se effettivamente mysql prova a lavorare sulla tabella e non può oppure dipende dalla sintassi usata, hai provato a creare prima la tabella e poi lanciare l'alter table per aggiungere il check?

    edit: così fa caricare la tabella, ma comunque, come diceva @FalkoTux, viene totalmente ignorata

    http://forums.mysql.com/read.php?100...5650#msg-35650

    comunque, dal check che hai inserito, sembra di capire che tu non voglia 2 persone con lo stessa identica coppia NOME/COGNOME quindi l'uso di una chiave unica su due colonne e quello che ti serve, no?
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31

    Re: Re: [MySQL] Problema con check

    Originariamente inviato da daniele_dll
    come semplice escamotage, per capire se effettivamente mysql prova a lavorare sulla tabella e non può oppure dipende dalla sintassi usata, hai provato a creare prima la tabella e poi lanciare l'alter table per aggiungere il check?

    edit: così fa caricare la tabella, ma comunque, come diceva @FalkoTux, viene totalmente ignorata

    http://forums.mysql.com/read.php?100...5650#msg-35650

    comunque, dal check che hai inserito, sembra di capire che tu non voglia 2 persone con lo stessa identica coppia NOME/COGNOME quindi l'uso di una chiave unica su due colonne e quello che ti serve, no?
    No mi serve che la coppia nome,cognome possa ripetersi 2 volte, infatti come dicevo la check che ho scritto è sbagliata
    Ho lavorato sul database semplicemente ignorando quel vincolo. Stamattina un collega mi ha suggerito di impostare la check così:
    codice:
    check(2 > (select count(nome,cognome) from persona))
    ma sinceramente non sono molto convinto...

  9. #9
    ehm, forse quel tuo collega non usa mysql

    count accetta un solo argomento

    comunque, il problema di fondo è che mysql non controlla i check quindi non c'è una soluzione al problema (almeno fino alla versione 5.5 non lo fa, non so se con la 6.0 la cosa è cambiata oppure se è cambiata con le alternative come MariaDB)

    però, scusa la domanda, perché non controlli tramite il linguaggio di programmazione che stai usando?

    sicuramente è meno performante, ma:
    - controlli correttamente l'errore (nel senso che se mysql dasse errore ... lo darebbe in modo generico e l'utente non capirebbe di che si parla)
    - risolvi il problema
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    31
    Originariamente inviato da daniele_dll
    ehm, forse quel tuo collega non usa mysql

    count accetta un solo argomento

    comunque, il problema di fondo è che mysql non controlla i check quindi non c'è una soluzione al problema (almeno fino alla versione 5.5 non lo fa, non so se con la 6.0 la cosa è cambiata oppure se è cambiata con le alternative come MariaDB)

    però, scusa la domanda, perché non controlli tramite il linguaggio di programmazione che stai usando?

    sicuramente è meno performante, ma:
    - controlli correttamente l'errore (nel senso che se mysql dasse errore ... lo darebbe in modo generico e l'utente non capirebbe di che si parla)
    - risolvi il problema
    Uhm bella domanda
    Non credo di usare nessun altro linguaggio oltre mysql. Lavoro su MySQL Workbench

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.