2010-12-07 14 views
0

J'écris une base de données SQL pour un site simple, mais il y a un problème. J'ai créé une table 'test', avec int test1 NOT NULL, et int test2 NOT NULL. Aucune valeur par défautInsérer un enregistrement avec null dans SQL alors qu'il ne devrait pas

Quand j'écris

INSERT INTO test 
    (test1, test2) 
VALUES 
    (1,2) 

... tout va bien.

Lorsque j'utilise

INSERT INTO test 
    (test1) 
VALUES 
    (4) 

devrait-il pas jeter une erreur? Au lieu de cela, il ajoute un enregistrement avec test1 = 4 et test2 = 0.

Que se passe-t-il?

+0

Où avez-vous vu cela? dans votre SGBD ou dans votre application? Si c'est dans votre SGBD, la valeur par défaut est insérée dans votre BD et dans ce dernier cas, vous voyez la valeur par défaut pour un type de données primitif dans votre application. –

Répondre

0

Attendez. Insère-t-il NULL dans test2 dans le second cas, ou 0? Ce ne sont pas la même chose. En supposant qu'il insère 0 comme vous spécifiez dans la question (par opposition à NULL, comme implicite par le titre): Je crois qu'il insère la valeur par défaut pour le type de données colonne int.

1

Ce qui suit fonctionne comme prévu sur la version 5.1.42. Dans quelle version êtes-vous?

create table test(
    test1 int not null 
    ,test2 int not null 
); 

Query OK, 0 rows affected (0.05 sec) 


insert into test(test1, test2) values(1,2); 
Query OK, 1 row affected (0.00 sec) 

insert into test(test1) values(4); 
ERROR 1364 (HY000): Field 'test2' doesn't have a default value 

insert into test(test2) values(4);  
ERROR 1364 (HY000): Field 'test1' doesn't have a default value 

select * from test; 
+-------+-------+ 
| test1 | test2 | 
+-------+-------+ 
|  1 |  2 | 
+-------+-------+ 
1 row in set (0.00 sec) 
+0

+1: Confirmé sur MySQL v5.1.35-community –

+0

wth? J'ai la dernière version de la communauté sur un mac. avez-vous écrit ces requêtes dans une application? Je les ai écrits dans mysql workbench et il n'a pas échoué .. il a inséré 0. – pvinis

+0

Ce qui précède a été testé en utilisant la commande mysql. Je l'ai juste réessayé dans mysql workbench 5.2.27 CE avec les mêmes résultats. – Ronnis

1

Cela peut avoir à voir avec le mode en MySQL. La valeur par défaut pour la colonne i INT NOT NULL est 0 qui sera insérée pour vous automatiquement lorsqu'il n'est pas dans mode strict. Si vous êtes en mode strict, votre requête échouera comme prévu.

http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

+0

+1: Jamais entendu parler du mode strict avant – Ronnis