2009-09-25 7 views
1

J'ai une application dans php & mysql où les utilisateurs écrit et lit à partir d'une table particulière. Un des modes d'écriture est dans un lot, ne faisant qu'une seule requête avec les multiples valeurs. La table a un identifiant qui s'incrémente automatiquement. L'idée est que pour chaque ligne de la table qui est insérée, une copie est insérée dans une table séparée, en tant que journal d'historique, y compris l'ID qui a été généré.Ids de mysql insert massif de sources simultanées

Le problème est que plusieurs utilisateurs peuvent le faire en même temps, et je dois être sûr que l'ID chargé est le bon.

Puis-je être sûr que si je le fais par exemple:

INSERT INTO table1 VALUES ('','test1'),('','test2') 

que les ids générés sont séquentiels?

Comment puis-je obtenir les ID qui viennent d'être chargés, et être sûr que ce sont ceux qui viennent d'être chargés?

J'ai pensé à la TABLE DE VERROUILLAGE, mais les utilisateurs ne devraient pas le remarquer.

espoir que je me suis fait clair ...

Répondre

0

basé sur la mise en œuvre actuelle de MyISAM et InnoDB, oui. Cependant, cela n'est pas garanti à l'avenir, donc je ne compterais pas dessus.

1

Construire une application qui nécessite que les identifiants générés soient séquentiels signifie généralement que vous prenez une mauvaise approche - que se passe-t-il lorsque vous devez supprimer une valeur un jour, allez-vous réorganiser la table entière? Il vaut mieux laisser les valeurs tomber telles quelles, en utilisant une clé primaire pour éviter les doublons.

+0

Juste ce champ ID est unique, tous les autres peuvent être répétés. Et je ne supprimerai jamais aucune valeur de celui-ci. C'est juste pour stocker des choses et prendre quelques rapports à partir de là. – nightshadex101

+0

OK - mais c'est toujours une exigence qui n'a généralement pas de sens. Une des grandes caractéristiques d'un SGBDR est que vous n'avez pas à vous préoccuper de choses comme ça. Y a-t-il une raison particulière pour laquelle vous voulez qu'ils soient séquentiels? – TML

+0

Je veux juste être en mesure de faire un > INSERT INTO table1_hist VALUES ('', 'test1'), ('', 'test2') mais avec des centaines de valeurs à la fois. Je peux le faire un par un, mais je ne pense pas que la performance sera la même. Et cela sera fait par des centaines d'utilisateurs en même temps, je dois être sûr que si je charge 5 lignes, j'obtiendrai ces 5 identifiants (quels qu'ils soient) et je pourrai les charger dans l'historique table. – nightshadex101

Questions connexes