Maison > base de données > tutoriel mysql > le corps du texte

Comment MySQL détermine-t-il si un champ est nul ?

(*-*)浩
Libérer: 2020-09-10 16:11:36
original
8296 Les gens l'ont consulté

Je crois que de nombreuses personnes qui utilisent MySQL depuis longtemps ne comprennent pas très bien les concepts de ces deux attributs de champ. Elles se posent généralement les questions suivantes :

Mon type de champ n'est pas nul, pourquoi. puis-je insérer des valeurs nulles ?

Pourquoi null n'est-il pas plus efficace que null

Lorsque nous jugeons qu'un champ n'est pas vide, devons-nous sélectionner * dans la table où la colonne <> '' ou devrions-nous utiliser select * from table où la colonne n'est pas encore nulle.

Comment MySQL détermine-t-il si un champ est nul ?

Avec les questions ci-dessus, examinons en profondeur la différence entre nul et non nul.

Tout d'abord, nous devons comprendre les concepts de "valeur nulle" et "NULL":

La valeur nulle n'occupe pas d'espace

NULL dans MySQL occupe en fait de l'espace Oui, voici l'explication officielle de MYSQL :

« Les colonnes NULL nécessitent un espace supplémentaire dans la ligne pour enregistrer si leurs valeurs sont NULL. Pour les tables MyISAM, chaque colonne NULL prend un bit supplémentaire, arrondi à l'unité supérieure. à l'octet le plus proche."

Par exemple, vous avez une tasse. Une valeur nulle signifie que la tasse est sous vide, et NULL signifie que la tasse est remplie d'air. Bien que la tasse semble vide, Mais la différence est énorme.

Après avoir compris les concepts de « valeur nulle » et « NULL », le problème est fondamentalement clair. Testons-le avec un exemple :

CREATE TABLE  `test` (  
 `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,  
 `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL  
) ENGINE = MYISAM ;
Copier après la connexion

Insérer des données :

INSERT INTO `test` VALUES (null,1);
Copier après la connexion
.

Une erreur MySQL s'est produite :

#1048 - Column 'col1' cannot be null
Copier après la connexion

Un autre

INSERT INTO `test` VALUES ('',1);
Copier après la connexion

a été inséré avec succès.

On peut voir que "NULL" ne peut pas être inséré dans les champs NON NULL, seules les "valeurs nulles" peuvent être insérées, et la question ci-dessus a la réponse.

Concernant le problème, comme nous l'avons dit ci-dessus, NULL n'est pas réellement une valeur nulle, mais prend de la place. Par conséquent, lorsque mysql effectuera une comparaison, NULL participera à la comparaison des champs, cela affectera donc partiellement l'efficacité. .

Et Les index B-tree ne stockeront pas les valeurs NULL, donc si les champs indexés peuvent être NULL, l'efficacité de l'indexation diminuera considérablement.

MYSQL recommande que les attributs de colonne soient NOT NULL autant que possible.

Vérification de la longueur : Notez qu'il n'y a pas d'espaces entre les '' des valeurs nulles.

mysql> select length(''),length(null),length(' ');

+------------+--------------+--------------+

| length('') | length(null) | length(' ') |

+------------+--------------+--------------+

| 0 | NULL | 2 |

+------------+--------------+--------------+
Copier après la connexion

Remarque :

Lorsque count() est utilisé pour compter le nombre d'enregistrements dans une colonne, si la valeur NULL est utilisée, le système l'ignorera automatiquement , mais s'il est vide, la valeur y sera comptée.

Pour juger NULL, utilisez IS NULL ou IS NOT NULL Vous pouvez utiliser la fonction ifnull() dans les fonctions d'instruction SQL pour traiter. process

Considérations particulières pour MySQL, pour le type de données timestamp, si vous insérez une valeur NULL dans une colonne insérée dans ce type de données, la valeur qui apparaît est l'heure système actuelle. Si vous insérez une valeur nulle, 0000-00-00 00:00:00

apparaîtra. Le fait d'utiliser est nul ou ='' pour juger de la valeur nulle dépend de l'entreprise réelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!