2016-01-13 5 views
1

J'ai une table de base de données pour les utilisateurs qui a une configuration similaire à ceci:MySQL permet des inserts même lorsque les champs requis ne sont pas présents

+---------------------+--------------+------+-----+------------+----------------+ 
| Field    | Type   | Null | Key | Default | Extra   | 
+---------------------+--------------+------+-----+------------+----------------+ 
| id_user    | int(5)  | NO | PRI | NULL  | auto_increment | 
| login    | varchar(50) | NO |  |   |    | 
| password   | varchar(50) | NO |  |   |    | 
| address    | varchar(255) | NO |  | NULL  |    | 
+---------------------+--------------+------+-----+------------+----------------+ 

Puisque le champ d'adresse est non nulle et la valeur par défaut est null, cela devrait effectivement rendre le champ d'adresse requis, non?

Mais quand j'effectue une requête telle que la suivante:

INSERT INTO mydatabase.users 
SET 
    mydatabase.users.login='test_username', 
    mydatabase.users.password='test_password' 

Il enregistre avec succès l'utilisateur sans se plaindre du champ d'adresse, qui est définie sur un espace vide.

Ce qui pourrait être à l'origine de cela? Je m'attends à une erreur dans ce genre de situation. Je l'ai essayé avec MySQL 5.5 et 5.6.

Répondre

3

Strict SQL mode n'est pas activé dans le fichier de configuration, donc mysql assouplit certains contrôles sur l'insertion de données:

mode strict contrôle comment MySQL gère les valeurs non valides ou manquantes dans les états changement de données telles que INSERT ou UPDATE. Une valeur peut être invalide pour plusieurs raisons. Par exemple, il peut avoir un type de données incorrect pour la colonne ou être hors de portée. Une valeur est manquante lorsqu'une nouvelle ligne à insérer ne contient pas de valeur pour une colonne non-NULL qui n'a pas de clause DEFAULT explicite dans sa définition. (Pour une colonne NULL, NULL est inséré si la valeur est manquante.) Le mode strict affecte également les instructions DDL telles que CREATE TABLE.

+0

Apprenez quelque chose de nouveau tous les jours, merci! J'ai ajouté ceci à mon fichier my.ini: 'sql-mode =" STRICT_TRANS_TABLES "' et maintenant ça marche comme je m'y attendais. – Chris