2011-12-19 7 views
12

J'espère que ce n'est pas une question stupide. Vous pouvez définir une valeur par défaut pour toutes les variables ou une fonction pour quand elle est insérée. mais si le champ n'est pas requis pour l'insertion et que vous n'autorisez pas les valeurs nulles, quelle est la valeur "vide" que vous voyez dans phpMyAdmin? dans une requête est-il retourné comme chaîne vide, etc? En essayant simplement de le comprendre, je veux interroger tous les enregistrements de sorte que la valeur d'une colonne spécifique dans cet enregistrement ne soit pas "vide" ou vide ou quoi que ce soit.Quelle est la valeur par défaut pour un champ si aucune valeur par défaut n'est fournie?

merci.

Répondre

22

Se référant à la manual Pour la saisie de données pour une colonne NOT NULL qui n'a pas de DEFAULT explicite

clause, si un INSERT ou REPLACE déclaration comprend aucune valeur pour la colonne , ou une instruction UPDATE définit la colonne à NULL, MySQL gère la colonne selon le mode SQL en vigueur au moment:

  • Si stricte Le mode SQL n'est pas activé, MySQL définit la colonne à la valeur par défaut implicite pour le type de données de la colonne.
  • Si le mode strict est activé, une erreur se produit pour les tables transactionnelles et l'instruction est annulée. Pour les tables non transactionnelles, une erreur
    se produit, mais si cela se produit pour la deuxième ligne ou la suivante de une instruction à plusieurs lignes, les lignes précédentes auront été insérées.

Votre question peut maintenant, quelles sont les valeurs par défaut implicites pour les différents types de données de colonne? Ici, vous allez:

par défaut implicites sont définies comme suit:

  • Pour les types numériques, la valeur par défaut est 0, à l'exception que pour entiers ou types à virgule flottante déclarés avec le AUTO_INCREMENT
    attribut , la valeur par défaut est la valeur suivante dans la séquence.
  • Pour les types de date et d'heure autres que TIMESTAMP, la valeur par défaut est la valeur "zéro" appropriée pour le type. Pour la première colonne TIMESTAMP dans une table, la valeur par défaut est la date et l'heure actuelles. Voir la Section 10.3, «Types de date et d'heure».
  • Pour les types de chaîne autres que ENUM, la valeur par défaut est la chaîne vide. Pour ENUM, la valeur par défaut est la première valeur d'énumération.
0

Il n'existe aucune valeur par défaut sauf si vous en spécifiez une (à moins que vous ne définissiez une "contrainte par défaut" pour la colonne en question).

Voici un exemple pour ajouter un défaut sur une colonne existante:

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

Voici un exemple la création de la table avec une valeur par défaut:

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

Il est bon de déclarer toutes les colonnes « not null ", et fournir des contraintes par défaut selon le cas.

Dans l'exemple "books" ci-dessus, si vous "insérez" sans spécifier PubID, le PubID sera zéro.

Dans le même exemple, si vous "insérez" sans spécifier d'ID ou de nom ... vous obtiendrez une erreur.

Si vous voulez que MySQL automatiquement attribuer une carte d'identité, utilisez la syntaxe suivante:

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

Si vous voulez interdire null: -

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

La requête ci-dessus refusera nulle et attribuer une chaîne vide lorsque la valeur n'est pas fournie. Dans phpmysqladmin, blank = empty.
Via PHP mysqli function ou mysql function, null value is returned as null encore.

Une fois que vous avez appliquer la requête, vous pouvez facilement filtrer que l'aide

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

Cependant, est le mieux pour le faire avant d'effectuer l'alter: -

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

Ce n'est pas sage à faire. 'NULL' signifie un manque de valeur (inconnu) et ** n'est pas la même chose qu'une valeur vide. –

Questions connexes