Visualizzazione dei risultati da 1 a 4 su 4

Discussione: mysql - vincolo check

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    mysql - vincolo check

    ciao a tutti...
    ho fatto questa query in mysql x la creazione di una tabella con un check

    CREATE TABLE `tabelle_assicurative` (
    `codiceTabella` VARCHAR( 256 ) NOT NULL ,
    `data_decorrenza` INT NOT NULL ,
    `data_scadenza` INT NOT NULL ,
    `tipo` BOOL NOT NULL DEFAULT '0' ,
    `sesso` CHAR( 1 ) NOT NULL DEFAULT 'M' ,
    `idAssicurazione` INT UNSIGNED NOT NULL ,
    PRIMARY KEY ( `codiceTabella` ),
    FOREIGN KEY ( `idAssicurazione` ) REFERENCES `assicurazioni`( `idAssicurazione` ) ON DELETE CASCADE ,
    CHECK (`sesso` = 'M' OR `sesso` = 'F')
    ) ENGINE = InnoDB ;

    la query viene eseguita correttamente, senza alcun errore.
    Se faccio una cosa del genere:
    insert into tabelle_assicurative values ('tab1',100,200,0,'h',1);
    mettendo il carattere h in sesso, non accade nulla e viene l'inserimento viene eseguito con successo.

    Ho provato a fare

    CREATE TABLE `header_tabelle_assicurative` (
    `codiceTabella` VARCHAR( 256 ) NOT NULL ,
    `data_decorrenza` INT NOT NULL ,
    `data_scadenza` INT NOT NULL ,
    `tipo` BOOL NOT NULL DEFAULT '0' ,
    `sesso` CHAR( 1 ) NOT NULL DEFAULT 'M' ,
    `idAssicurazione` INT UNSIGNED NOT NULL ,
    PRIMARY KEY ( `codiceTabella` ),
    FOREIGN KEY ( `idAssicurazione` ) REFERENCES `assicurazioni`( `idAssicurazione` ) ON DELETE CASCADE ,
    CONSTRAINT sexDomain CHECK (`sesso` = 'M' OR `sesso` = 'F')
    ) ENGINE = InnoDB ;

    ma niente...
    non succede niente...non riesco a bloccare gli insert quando in sesso inserisco un carattere diverso da M o F.
    So che in MySQL questo genere di vincoli sono implementati non tanto bene e che con altri dbms potrei mettere un dominio con create domain, cosa che con mysql nn si può fare...
    Aggiungere un vincolo ad un attributo in mysql è possibile o no? Per caso devo configurare qualcosa nel dbms, visto che c'è l'ho in locale?
    vi ringrazio anticipatamente
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    risolto
    http://dev.mysql.com/doc/refman/5.0/...ate-table.html
    semplicemente che mysql elabora la richiesta e, semplicemente, la ignora...
    è scritto in un mezzo rigo alal fine della pagina
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  3. #3
    Originariamente inviato da Hysoka
    risolto
    http://dev.mysql.com/doc/refman/5.0/...ate-table.html
    semplicemente che mysql elabora la richiesta e, semplicemente, la ignora...
    è scritto in un mezzo rigo alal fine della pagina
    infatti il CHECK esiste per la sola compatibilita' SQL. usa un campo in formato ENUM con opzioni M/F cosi' non potranno mettere altro.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    Originariamente inviato da piero.mac
    infatti il CHECK esiste per la sola compatibilita' SQL. usa un campo in formato ENUM con opzioni M/F cosi' non potranno mettere altro.
    x curiosità: se nel parser hanno implementato il riconoscimento dei check, cosa ci costava a rendere quell'istruzione funzionante?
    Cioè, hanno creato un intero dbms e si sn fregati di questa cosa?
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.