12
votes

MySQL - Insertion dans la table avec une seule colonne d'incrémentation automatique

permet de dire que nous avons une table A avec une seule colonne, ID (qui est la clé primaire)

Comment insérons-nous une nouvelle ligne dans la table sans spécifier un identifiant? P>

J'ai essayé ceci p> xxx pré>

et il ne fonctionne pas p>

EDIT: STRUT> J'ai oublié de mentionner cet identifiant, la clé primaire a l'auto_incrènement et pas d'attribut nul. p>

EDIT 2: strong> L'erreur exacte lors de l'exécution de la requête ci-dessus est p>

Column 'id' cannot be null


6 commentaires

Pourquoi ne pas partager avec nous comment cela ne fonctionne pas exactement?


Le champ PK n'autorise pas les valeurs dupliquées ni les valeurs nulles


Les champs principaux clés ne doivent pas être nuls.


@arvinsim - Votre description de la configuration semble correcte. Vous n'avez probablement pas réussi à faire certaines des étapes que vous affirmez que vous avez faites.


@Alvaro a essayé de faire un simple insert dans le cadre et en phpmyadmin. Les deux ont renvoyé la même erreur ci-dessus. J'étais sous l'hypothèse que si NULL donne la valeur d'une ligne d'incrémentation automatique, elle essaiera de l'insérer à l'aide de la valeur d'incrémentation automatique suivante. Cela fonctionne peut-être que sur des tables avec plus d'une colonne?


Pouvez-vous poster votre définition de table pls :)


5 Réponses :


-1
votes

Essayez-le sans le `` .. Comme dans:

Insérer dans une valeur (SID) (NULL); // J'ai utilisé SID au lieu d'id ...

a fonctionné bien pour moi ..

également sur la création du tableau A, spécifier unique unique (SID) ... i.e

Créer une table A (SID INT (3) NON NULL Auto_Increment unique (SID));


1 commentaires

Le style citant ne devrait rien changer



5
votes

ne fonctionne que si vous utilisez une touche primaire Auto_incrimentation (PK), car chaque PK doit avoir une valeur unique et non nulle.

drop table if exists A;
create table A
(
id int unsigned not null auto_increment primary key
)
engine=innodb;

insert into A (id) values (null),(null);

mysql> select * from A order by id;
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.00 sec)


2 commentaires

Oui c'est un champ d'incrémentation automatique


À moins que je manque quelque chose, c'est la mise en place décrite dans la question: -?



17
votes

dès que "ID" car l'activation automatique de l'auto-incrément (en supposant que l'ID est un entier), vous pouvez simplement faire:

INSERT INTO A (id) values (null)


4 commentaires

Je ne pense pas que cela fonctionne. Je l'ai essayé et j'ai essayé d'insérer le chiffre 0. Puisque j'essayais d'insérer 5 fois, il produit une erreur d'entrée en double.


@arvinsim: Il doit y avoir un problème avec votre configuration. MySQL accepte les deux null et 0 comme des valeurs pour une colonne auto_incrimentation et les interprète comme signifiant "Utiliser l'identifiant suivant".


Cela a fonctionné pour moi avec une base de données MySQL. Cela incrémente en fait l'identifiant à chaque fois.


Le problème vient pour obtenir ce numéro, signe !!



0
votes

J'ai eu un problème similaire, puis j'ai remarqué que je n'ai pas appliqué les modifications lorsque j'ai changé ID sur la touche primaire + NON NULL + AUTO INFREMENTAL.


0 commentaires

0
votes
INSERT INTO `table` () VALUES (); 
is working too.

0 commentaires