2015-11-09 2 views
0

Tout d'abord, je veux INSERT données dans deux TABLE à la fois. Je sais que ce n'est pas possible. En raison de cette limitation, je prévois un problème qui pourrait se produire si deux REQUESTS (pour insérer des données) se produisent simultanément.MySQL insérer des données AVOID Ambiguité

Y at-il un moyen que lorsque je INSERT données dans le premier tableau. Personne ne pouvait avoir des données dans le premier TABLE alors que j'entre une donnée relationnelle pour éviter une mauvaise liaison des données (ce qui pourrait se produire parce que j'utilise la fonction mentionnée pour obtenir le dernier ID inséré) mysqli_insert_id();.

J'espère que mon message est clairement défini. Si ce n'est pas le cas, mentionnez-le afin que je puisse me débarrasser de cette éventualité. Je vous serai reconnaissant à cet égard.


                                    UPDATE

EXEMPLE:                       ILLUSTRATION (CODE PSEUDO)
                      (exemple est ajouté que mon problème n'a pas été clairement traitée)


REQUEST- 1:

//ClientRequest-1 
1. INSERT data in table-A 
2. GET INSERT-ID 
3. INSERT data in table-B 

DEMANDE-2:

//ClientRequest-2 
1. INSERT data in table-A 
2. GET INSERT-ID 
3. INSERT data in table-B 

DÉFI:

si les deux demandes se traitées en parallèle sans erreur (Préalable) dans l'ordre suivant (plusieurs demande filetée):

01. Point # 1 of Request-1 

02. Point # 1 of Request-2 
03. Point # 2 of Request-2 
04. Point # 3 of Request-2 

05. Point # 2 of Request-1 
06. Point # 3 of Request-1 

Le problème est:

When Points 02,03,04 get executed, will the insert_id get affected for Request-1 

me guider Veuillez, est la bonne façon ou d'une autre façon de le faire. Sera reconnaissant à vous en ce qui concerne King.

+1

Vous recherchez une transaction. – Mjh

+0

Je suis nouveau, oui peut être comme ça. @Mjh –

+1

J'expliquerais plus loin, mais googler juste pour une "transaction de MySQL" donnera d'excellents résultats. Une transaction signifie que TOUTES les requêtes sont exécutées (dans la transaction) ou aucune. Cela vous permet d'arrêter de vous inquiéter de "ce qui se passe si les demandes se produisent simultanément". À l'aide d'une transaction, vous isolez un ensemble de requêtes (qu'il s'agisse d'insérer, de supprimer ou de mettre à jour) à partir des autres requêtes en cours. Dans votre cas, cela signifie que vous pouvez simplement insérer les données et ne pas s'inquiéter. – Mjh

Répondre

2

Vous obtenez un peu confus. Toutes les opérations DML (insertion, mise à jour, suppression) contiennent un verrou implicite de niveau ligne ou table sur la table et même si le traitement se fait de manière multitread, un autre DML ne réussira que si le verrou est libéré par une opération DML précédente. cas c'est INSERT).

Pour une meilleure fiabilité, vous pouvez envisager de placer votre bloc de code DML dans un bloc TRANSACTION explicitement pour s'assurer de l'atomicité de l'opération.

+0

Je voulais dire, les deux insèrent dans la même table @Rahul –

+1

@MalikAsif, c'est exactement ce que j'ai dit. Pour la même table seulement. – Rahul

+0

Merci beaucoup, maintenant j'ai compris. @Rahul –