| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: Verständnisfrage: paralleler Insert im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Hallo, nehmen wir an, es existiert folgende MySQL-Tabelle (test_tabelle): Code: | id | wert | |----|-------| | 1 | alpha ...
![]() |
| | #1 (permalink) |
| Registriert seit: 30.03.06 ![]() Likes: 0 | Hallo, nehmen wir an, es existiert folgende MySQL-Tabelle (test_tabelle): Code: | id | wert | |----|-------| | 1 | alpha | | 2 | beta | | 3 | gamma | Eine IF-Abfrage prüft, ob der letzte Wert tatsächlich "gamma" ist und führt bei "true" ein Query (2 Mal) aus: PHP-Code: Bitte behandelt diese Frage sehr abstrakt, ich bin mir im Klaren, dass es aufgrund von Latenz usw. surreal ist, eine Abfrage zur selben Zeit an den Server zu senden. Irgendwo hatte ich mal gelesen, dass eine Tabelle immer in dem Moment für andere Zugriffe blockiert ist, wenn eine Abfrage stattfindet. Ich möchte daher wissen wie es sich verhält, wenn das Script 2 Mal zur selben Zeit aufgerufen wird ![]() Herzlichen Dank schon mal für eure Antworten. |
| | |
| | #2 (permalink) | |
| Registriert seit: 07.05.07 ![]() Likes: 18 | Zitat:
Dafür gibt es allerdings Transaktionen.
__________________ | |
| | |
| HaBOT | |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 30.03.06 ![]() Likes: 0 | Läuft das auf das selbe hinaus wie LOCK TABLES und UNLOCK TABLES? |
| | |
| | #4 (permalink) | |
| Moderator ![]() Registriert seit: 30.09.06 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 378 | Zitat:
__________________ Mein Blog - Mein Job - Diaspora Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund. Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+ | |
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 30.03.06 ![]() Likes: 0 | Okay, ich habe mich in die Sache noch etwas reingelesen. Für meinen Fall wäre LOCK TABLES ausreichend, allerdings frage ich mich immer noch, wie die Datenbank entscheidet welcher Query Vorrang erhält und welcher eben als zweites ausgeführt wird. Nicht dass es wichtig wäre, weil in meinem Beispiel sowieso beide gleich sind.. Aber würde mich interessieren wie das technisch gelöst ist. |
| | |
| | #6 (permalink) |
| Moderator ![]() Registriert seit: 30.09.06 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 378 | Das wird anhand der Prozess-Queue gelöst. Es können niemals beide Prozesse an der gleichen Stelle in der Queue stehen. Jener, der also zuerst Rechenzeit bekommt um in der Queue zu landen, wird vorrangig behandelt.
__________________ Mein Blog - Mein Job - Diaspora Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund. Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+ |
| | |
| | #7 (permalink) |
| Themenstarter Registriert seit: 30.03.06 ![]() Likes: 0 | Okay, das klingt logisch. Ich werde das vllt. mal testen, indem ich meinem PHP-Script ein sleep() gebe und in der Zeit eine andere Abfrage starte ![]() Gerade ist mir eingefallen, dass es evtl. im Beispiel auch zielführend wäre, der Spalte "wert" einen Unique-Index zu geben. Ist halt die Frage was passiert, wenn in diesem Fall beide Abfragen gleichzeitig beim Server ankommen. Um mal dein Stichwort "Rechenzeit" aufzugreifen: da würde dann ein Query bevorteilt werden und das Problem hätte sich durch den Unique erledigt (?) |
| | |
| | #8 (permalink) |
| Moderator ![]() Registriert seit: 30.09.06 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 378 | Ja, genau so. Allerdings solltest du dann auch noch eine auto_increment setzen, weil unique nicht automatisch aufsteigend bedeuten muss. Das als zweites ausgeführte Query könnte also bei einem unique ohne auto_increment auch kleiner sein als das erste, wodurch die Reihenfolge nicht mehr erkennbar wäre.
__________________ Mein Blog - Mein Job - Diaspora Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund. Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+ |
| | |
| | #9 (permalink) | |
| Senior Member Registriert seit: 07.01.03 ![]() Likes: 13 | Zitat:
| |
| | |
| | #10 (permalink) |
| Themenstarter Registriert seit: 30.03.06 ![]() Likes: 0 | Danke für eure umfassende Hilfe, ich werde wohl direkt die Transaktionen von MySQL nutzen: PHP-Code: Geändert von webfreak (25.01.12 um 16:58 Uhr) |
| | |
| | #11 (permalink) |
| Senior Member Registriert seit: 07.01.03 ![]() Likes: 13 | Bedenke, dass du mit einem LOCK TABLES parallele Schreibzugriffe auf die Tabelle komplett unterbindest. Wenn (parallele) Performance eine Rolle spielt, ist das eine schlechte Wahl. |
| | |
| | #13 (permalink) |
| Senior Member Registriert seit: 07.01.03 ![]() Likes: 13 | Wieso? Das sperrt insbesondere auch Updates und Deletes von völlig unbetroffenen Zeilen aus. |
| | |
| | #14 (permalink) |
| Member of Honour ![]() Registriert seit: 11.09.03 ![]() Likes: 2 | wobei man sich auch eine "Sperrtabelle" machen könnte. Wenn man nun von 2 Prozessen ausgeht, die gleichzeitig gestartet werden und deren Logik so aussieht: Code: Originale Speichertabelle | id | wert | |----|-------| | 1 | alpha | | 2 | beta | | 3 | gamma | Sperrtabelle | id | |----| | 4 | Natürlich muss der Eintrag in der SperrTab ein COMMIT bekommen, und man muss hinterher die SperrTab wieder aufräumen. |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| SQL SELECT, INSERT vs INSERT | Inliferty | (Web-) Design und webbasierte Sprachen | 1 | 29.07.11 20:16 |
| php -> insert into klappt nicht? Oo | _fux_ | (Web-) Design und webbasierte Sprachen | 12 | 07.11.09 16:37 |
| C++ Rekursionsfunktion / insert item | _fux_ | Code Kitchen | 12 | 08.09.08 17:39 |
| mysql mehrere insert | Dawen | Applikationen | 0 | 17.04.08 17:50 |
| Verständnisfrage zu md5 | crusaderv83 | Cryptography & Encryption | 16 | 29.08.07 22:31 |