Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: MySql campi NOT NULL

  1. #1

    MySql campi NOT NULL

    Salve,
    ho creato un database in MySql, dove sono presenti tabelle di tipo InnoDB con alcuni campi definiti NOT NULL.
    Questo dovrebbe far si che tali campi dovrebbero necessariemente contenere un valore si?
    Ma quando eseguo un inserimento in questi campi, con dati provenienti da form HTML, anche se il valore di tali form è vuoto, le operazioni di inserimento vanno a buon fine, con il risultato che i campi definiti NOT NULL restano vuoti e vegeti.
    Non dovrei ricevere un qualche messaggio di errore??
    Specifico che quando eseguo la query effettuo anche il controllo di errore, cioè if(!mysql:query("...

    A questo punto mi chiedo, un valore vuoto di un form come viene interpretato? Come NULL, come stringa a lunghezza zero? COME?
    E come posso fare per impedire che i campi definiti NOT NULL respingano valori vuoti?
    Grazie, a presto!

  2. #2
    Non ho capito granche'. I campi NOT NULL significano che non possono essere NULL. Un campo NULL non e' negativo, non e' zero, non e' FALSE, non e' TRUE .... semplicemente non esiste. E quindi e' di fatto un VALORE a se stante.

    Un Campo NOT NULL puo' essere qualunque cosa compreso VUOTO, EMPTY, negativo o FALSE e come tale viene conteggiato per esempio nel computo di una media (AVERAGE) mentre un campo NULL verrebbe ignorato. Quindi un campo NOT NULL non potra' mai assumere la caratteristica di NULL.

    Da notare che se invece un campo NULL viene valorizzato con un record anche "vuoto" perde la caratteristica di NULL per assumere quella di un campo vuoto NOT NULL. Per tornare alla caratteristica di NULL devi fare una valorizzazione NULL esplicita.

    set campo = NULL ....


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

  3. #3
    Infatti non hai capito.
    Speciicare un campo con il flag NOT NULL, significa che non voglio che quel campo contenta un valore nullo, cioè deve contenere PER FORZA qualcosa.
    Solo che se anche li tengo segnati a questo modo, comunque MySql mi permette di laciarli vuoti. Questo è il mio problema. Vorrei la coerenza con l'impostazione selezionata.

  4. #4
    Originariamente inviato da GiosinoSPS
    Infatti non hai capito.
    Speciicare un campo con il flag NOT NULL, significa che non voglio che quel campo contenta un valore nullo, cioè deve contenere PER FORZA qualcosa.
    Solo che se anche li tengo segnati a questo modo, comunque MySql mi permette di laciarli vuoti. Questo è il mio problema. Vorrei la coerenza con l'impostazione selezionata.
    Rileggi quello che ho scritto .... e' ben chiara la risposta.

    Domanda: cosa intendi tu per un valore NULL?

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

  5. #5
    VUOTO e NULL sono due cose diverse!!

    NULL è un valore che non esiste!!
    VUOTO è un valore uguale per es. a ""
    Ciao!

  6. #6
    Allora mettiamola così: quando voi settate un campo come NOT NULL, a che scopo lo fate, cosa volete ottenere?

  7. #7
    Originariamente inviato da GiosinoSPS
    Allora mettiamola così: quando voi settate un campo come NOT NULL, a che scopo lo fate, cosa volete ottenere?
    Guarda che di norma i campi si settano NOT NULL. Cioe' un campo deve essere presente e valutato anche se fosse vuoto oppure valorizzato con un default.

    L'uso di NULL serve per avere conteggi o statistiche, comunque in casi in cui sia ben chiaro che esista la possiblita' che un campo sia NULLO. Tra l'altro il campo NULL comporta maggior costo elaborativo, maggior spazio occupato di un campo NOT NULL vuoto.

    Ripeto ancora una volta:

    NULL il campo non esiste, non e' presente se non viene valorizzato.

    NOT NULL il campo e' sempre presente. E questa e' la condizione di uso normale.

    Quello che tu fraintendi e' l'assioma NULL = VUOTO. Cosi' NON e'.

    se fai una SELECT e vuoi trovare i campi NULL dovrai scrivere:

    WHERE campo = NULL

    Se invece vuoi trovare i campi VUOTI dovrai scrivere:

    WHERE campo = ''

    e non ti compariranno i campi NULL, perche' per la query non esistono. Per vederli li devi richiamare in modo specifico ... where campo = NULL......

    Quindi per rispondere infine alla tua domanda ... NOT NULL si utilizza quando si vuole che il campo sia sempre presente nella gestione delle tuple anche nel caso fosse FALSE o VUOTO.

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

  8. #8
    Stavo seguendo un manuale su Php e MySql e ad un certo punto l'autore B.McLaughlin scrive questo:
    "Per richiedere che si immetta obbligatoriamente un valore in un campo, basta dire a MySQL che quel campo non può essere null, che è il modo in cui i programmatori indicano l'assenza di un valore:

    CREATE TABLE users (
    user_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ...ecc...
    );

    ...adesso si dispone di una versione della tabella users leggermente più robusta, con AUTO_INCREMENT e la convalidadei valori in alcuni campi chiave." (riferendosi a quelli in cui si è impostato NOT NULL).

    Anch'io pensavo che impostando NOT NULL su un campo, MySQL avrebbe restituito un errore o comunque un avviso a seguito della mancata immissione di un valore. Cioè credevo che MySQL impedisse di memorizzare un nuovo record se almeno i campi impostati con NOT NULL non venissero riempiti con un valore (in questo caso da impostare attraverso la compilazione di un form html).
    Sono un po' confuso perchè continuando sul libro non se ne parla più e leggendo la discussione mi sono venuti ancora più dubbi.
    Qualcuno potrebbe illuminarmi?
    Come posso sfruttare MySQL in modo che rigetti l'immissione di un record per mancanza di uno o più valori in campi da ritenere obbligatori?

  9. #9
    Un controllo di questo tipo sul contenuto di un form non deve essere demandato al server ma al browser stesso.

    Con javascript puoi controllare sia il contenuto che il tipo di contenuto e far compilare correttamente i campi senza creare lavoro inutile al server.

    Empty cioe' vuoto e comunque un contenuto NOT NULL.

    Un esempio: se metti un campo NULL e se questo poi non verra' valorizzato il campo non sara' calcolato per fare la media dei valori della colonna mentre se messo come NOT NULL ma vuoto questo verrebbe contato.

    5 record campo settato NULL
    1 = 2
    2 = 10
    3 = NULL
    4 = 6
    5 = NULL
    AVG = (2+10+6) : 3 = 6

    5 record campo settato NOT NULL
    1 = 2
    2 = 10
    3 = vuoto o NULL
    4 = 6
    5 = vuoto o NULL
    AVG = (2+10+0+6+0) : 5 = 3,6

    Quindi un campo impostato come NOT NULL e valorizzato con un NULL (bool e non stringa) non diventera' mai NULL ma sara' VUOTO (EMPTY) oppure con il default del campo se previsto.

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

  10. #10
    Infatti sul libro si riporta il discorso del controllo tramite php o javascript dei campi-form ma l'autore fa notare come sia importante anche effettuare tale controllo attraverso MySQL onde evitare che a causa di un malfunzionamento di uno dei controlli javascript o php si immettano nel database record non voluti perchè incompleti.
    Di conseguenza ripropongo il quesito: è possibile controllare l'immissione di un record nel database direttamente da MySQL? Vorrei sapere se c'è il modo di non memorizzare nel database finchè i campi ritenuti obbligatori non avranno un valore (immesso magari da un utente tramite form estreno).

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.