99 votes

Comment insérer des valeurs par défaut dans une table SQL ?

J'ai une table comme celle-ci :

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)

Je veux insérer une ligne qui a les valeurs par défaut pour les champs 2 et 4.

J'ai essayé insert into table1 values (5,null,10,null) mais cela ne fonctionne pas et ISNULL(field2,default) ne fonctionne pas non plus.

Comment puis-je dire à la base de données d'utiliser la valeur par défaut de la colonne lorsque j'insère une ligne ?

2 votes

Voir aussi cette question pour le cas où todo Les colonnes ont des valeurs par défaut.

1 votes

S'il vous plaît, ne postez jamais " ne fonctionne pas "sans définir cómo .

185voto

gbn Points 197263

La meilleure pratique consiste à lister vos colonnes afin d'être indépendant des changements de table (nouvelle colonne ou ordre des colonnes, etc.).

insert into table1 (field1, field3)  values (5,10)

Toutefois, si vous ne souhaitez pas le faire, utilisez la fonction DEFAULT mot-clé

insert into table1 values (5, DEFAULT, 10, DEFAULT)

18 votes

Génial ! C'est exactement ce que je recherchais. Note : vous pouvez aussi spécifier les colonnes et les valeurs, en passant DEFAULT au lieu de NULL et vous obtiendrez la valeur par défaut s'il y a une contrainte DEFAULT, ou NULL si la colonne est nullable et qu'aucune contrainte par défaut n'est spécifiée.

3 votes

Este hace fonctionne, mais quand j'ai essayé d'être fantaisiste en utilisant (CASE WHEN This = That THEN 'SpecifiedValue' ELSE DEFAULT END) il serait pas travail, à mon grand dam. Je devais encore soit préparer plusieurs déclarations d'insertion pour couvrir tous mes scénarios, soit utiliser Dynamic-SQL. :(

0 votes

Pour une raison quelconque, je n'ai pas réussi à le faire fonctionner avec le DB Browser pour SQLite. Il se plaignait toujours d'une erreur de syntaxe autour de DEFAULT . J'ai dû spécifier les colonnes qui ne sont pas par défaut comme dans l'exemple ci-dessus, puis fournir des valeurs pour celles-ci, et enfin cela a fonctionné.

98voto

aroth Points 28424

Il suffit de ne pas inclure les colonnes pour lesquelles vous voulez utiliser la valeur par défaut dans votre déclaration d'insertion. Par exemple :

INSERT INTO table1 (field1, field3) VALUES (5, 10);

...prendra les valeurs par défaut pour field2 y field4 et attribue 5 à field1 et 10 à field3 .

2 votes

Que se passe-t-il si la colonne n'a pas de valeurs par défaut définies et qu'elle est également réglée sur "NOT ALLOW NULLS" ?

1 votes

@binki Je devrais peut-être reformuler mon commentaire : "aroth : votre réponse n'est pas complète, en raison d'une exception possible lorsque la colonne n'a pas de valeurs par défaut définies et qu'elle est également définie sur 'NOT ALLOW NULLS'".

4 votes

@Danon - L'OP déclare "Je veux insérer une ligne qui a les valeurs par défaut pour field2 et field4" et demande "Comment puis-je dire à la base de données d'utiliser la valeur par défaut pour la colonne lorsque j'insère une ligne ?". Vous avez raison de dire que cette réponse ne couvre pas le cas où les valeurs par défaut ne sont pas Cependant, comme la question est explicitement pas En demandant à propos de ce cas, il n'est pas vraiment exact de décrire la réponse comme incomplète. Vous parlez d'une question complètement différente (qu'il est préférable de poser comme une question distincte).

58voto

inon Points 814

Cela fonctionne si toutes les colonnes ont des valeurs par défaut associées et que l'on ne veut pas spécifier les noms des colonnes :

insert into your_table
default values

6 votes

Cela fonctionne si toutes les colonnes ont des valeurs par défaut associées et que l'on ne veut pas spécifier les noms des colonnes.

6 votes

Bien que ce ne soit pas nécessairement une réponse complète à la question posée, vous avez accidentellement répondu à une question que je me posais, donc merci pour cela :)

8voto

fkerber Points 857

Essayez comme ceci

INSERT INTO table1 (field1, field3) VALUES (5,10)

Ensuite, les champs 2 et 4 doivent avoir des valeurs par défaut.

3voto

Oded Points 271275

Si vos colonnes ne doivent pas contenir NULL vous devez définir les colonnes comme NOT NULL également, sinon les données transmises dans NULL sera utilisée à la place de la valeur par défaut et ne produira pas d'erreur.

Si vous ne passez pas dans cualquier à ces champs (ce qui vous oblige à spécifier les champs que vous souhaitez utiliser). faire veulent utiliser), les valeurs par défaut seront utilisées :

INSERT INTO 
  table1 (field1, field3) 
VALUES   (5,10)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X