2011-12-19 16 views
12

Spero che questa non sia una domanda stupida. È possibile impostare un valore predefinito per tutte le variabili o una funzione per quando è inserito. ma se il campo non è obbligatorio da inserire e non si accettano valori null, qual è il valore "vuoto" che vedi in phpMyAdmin? in una query viene restituito come stringa vuota, ecc.?Qual è il valore predefinito per un campo se non viene fornito un valore predefinito?

solo cercando di capirlo, voglio interrogare per tutti i record tale che il valore per una colonna specifica in quel record non è "vuoto" o vuoto o qualsiasi altra cosa.

grazie.

risposta

22

riferendosi al manual ,

Per l'immissione dati per una colonna NOT NULL che non ha DEFAULT esplicito clausola, se un inserire o sostituire economico include alcun valore per la colonna , o un'istruzione UPDATE imposta la colonna NULL, MySQL gestisce la colonna in base alla modalità di SQL in vigore al momento:

  • Se rigorosa La modalità SQL non è abilitata, MySQL imposta la colonna sul valore predefinito implicito per il tipo di dati della colonna.
  • Se la modalità rigorosa è abilitata, si verifica un errore per le tabelle transazionali e viene eseguito il rollback dell'istruzione. Per le tabelle non transazionali, si verifica un errore , ma se ciò accade per la seconda riga o successiva di un'istruzione a più righe, le righe precedenti saranno state inserite.

Quindi la tua domanda ora può essere, quali sono i valori di default impliciti per i vari tipi di dati di colonna? Qui si va:

default impliciti sono definite come segue:

  • per i tipi numerici, il valore predefinito è 0, con l'eccezione che per i tipi interi o in virgola mobile dichiarate con l'AUTO_INCREMENT
    attributo , il valore predefinito è il prossimo valore nella sequenza.
  • Per tipi di data e ora diversi da TIMESTAMP, il valore predefinito è "zero" appropriato per il tipo. Per la prima colonna TIMESTAMP in una tabella, il valore predefinito è la data e l'ora correnti. Vedere la Sezione 10.3, "Tipi di data e ora".
  • Per tipi di stringhe diversi da ENUM, il valore predefinito è la stringa vuota. Per ENUM, il valore predefinito è il primo valore di enumerazione.
0

Non esiste alcun valore predefinito a meno che non ne venga specificato uno (ad esempio, a meno che non si definisca un "vincolo predefinito" per la colonna in questione).

Ecco un esempio per l'aggiunta di un default su una colonna esistente:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown' 

Ecco un esempio la creazione della tabella con un valore predefinito:

CREATE TABLE Books (
    ID SMALLINT NOT NULL, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

E 'buona pratica di dichiarare tutte le colonne "non nullo "e fornire i vincoli predefiniti in base alle esigenze.

Nell'esempio "libri" sopra, se "inserisci" senza specificare PubID, il PubID sarà zero.

Nello stesso esempio, se "si inserisce" senza specificare ID o Nome ... si otterrà un errore.

Se si desidera MySQL per l'auto-assegnare un ID, utilizzare questa sintassi invece:

CREATE TABLE Books (
    ID SMALLINT NOT NULL AUTO_INCREMENT, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 
-1

Se si vuole impedire nulla: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default ''; 

La query sopra impedirà nulla e assegnare una stringa vuota quando il valore non viene fornito.
In phpmysqladmin, blank = empty.
tramite PHP mysqli function o mysql function, null value is returned as null fermo.

Una volta che avete applicare la query, si può facilmente filtrare che, utilizzando

select ... from YOUR_TABLE 
where COLUMN != "";  <-- no need to check is null 
          <-- because the first query already enforce not null 

Tuttavia, è meglio per voi farlo prima di eseguire l'alter: -

update YOUR_TABLE set COLUMN = "" 
where COLUMN is null; 
+2

Questo non è consigliabile. 'NULL' significa una mancanza di valore (uno sconosciuto) ed è ** non ** uguale a un valore vuoto. –

Problemi correlati