Afhandeling meerdere SQL queries

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander Z

Sander Z

21/09/2012 10:01:58
Quote Anchor link
Nadat een gebruiker een form heeft ingevult plaats ik deze data in de database. Dit gaat dan in meerdere tabellen.
Nu vraag ik mij af wat de juiste manier is om hier mee om te gaan. Op dit ogenblik draai ik in dit geval uiteindelijk 3 queries om de data in alle tabellen te krijgen. Maar wat nu als bv de 2e of 3e query mislukt?

Is er een mogelijkheid om de 3 queries in 1x uit te voeren? Of moet dit echt per stuk? En hoe moet je er mee om gaan als den 2e of 3e query faalt?
 
PHP hulp

PHP hulp

22/12/2024 09:27:44
 
Marvin H

Marvin H

21/09/2012 10:14:06
Quote Anchor link
Je kan niet verschillende data in één insert query plaatsen voor meerdere tabellen. Dit is opzich ook helemaal niet nodig...

Wat als er een query fout gaat? Zorg ervoor dat je een error reporting heb zodat je weet dat het niet goed gaat, maar waarom zou een insert fout gaan?
 
Sander Z

Sander Z

21/09/2012 10:22:50
Quote Anchor link
Waarom een insert fout kan gaan? Te veel verbindingen, te weinig geheugen etc...
Ik weet nog niet precies welke, maar in 99,8% van de gevallen gaat het goed. Alleen die 0,2% niet. Waar het aan ligt? Wist ik het maar.
Het zorgt wel voor vervuiling en niet werkende onderdelen als ik er vanuit ga dat een insert altijd goed gaat. Want het ene deel van de gegevens staan in de ene tabel, maar de andere gegevens zijn niet te vinden in de andere tabel(len)

Daarom vroeg ik mij af wat hier de juiste methode voor is. Of ben ik een uitzonderlijk geval waarbij een insert mis gaat?
 
Marvin H

Marvin H

21/09/2012 10:30:09
Quote Anchor link
Normaal gesproken zou een insert niet fout mogen gaan, dan is er echt iets niet goed aan de server. Wat je zou kunnen doen als één van de queries fout gaat een delete query draaien die dan de gegevens die pas ingevoerd zijn weer verwijderd.

Dan heb je geen gegevens die er voor de helft instaan
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/09/2012 10:35:56
Quote Anchor link
Daarvoor bestaan transactions, zie hier
 
Marvin H

Marvin H

21/09/2012 10:37:40
Quote Anchor link
Ger van Steenderen op 21/09/2012 10:35:56:
Daarvoor bestaan transactions, zie hier


Dit kan niet als je database draait in MyISAM
 
Sander Z

Sander Z

21/09/2012 10:56:41
Quote Anchor link
@Ger
Dank je! Goede tip, ga ik me eens in verdiepen.

@Marvin
Das dan weer balen... BTW weet je ook waarom niet op MyISAM?
En ik ga eens kijken wat er eventueel op mijn server gebeurt...
Gewijzigd op 21/09/2012 10:58:42 door Sander Z
 
John D

John D

21/09/2012 11:06:36
Quote Anchor link
MySQL op MyISAM is gewoon niet transactioneel gebouwd, eigenlijk is MyISAM wat oudere technologie voor MySQL, voordeel is wel dat het razendsnel is dus het wordt nog veel gebruikt. je innodb status dat opvragen met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
mysql> show status where variable_name like 'inno%';
+---------------------------------------+---------+
| Variable_name                         | Value   |
+---------------------------------------+---------+
| Innodb_buffer_pool_pages_data         | 294     |
| Innodb_buffer_pool_pages_dirty        | 0       |
| Innodb_buffer_pool_pages_flushed      | 0       |
| Innodb_buffer_pool_pages_free         | 1817    |
| Innodb_buffer_pool_pages_misc         | 1       |
| Innodb_buffer_pool_pages_total        | 2112    |
| Innodb_buffer_pool_read_ahead_rnd     | 0       |
| Innodb_buffer_pool_read_ahead         | 0       |
| Innodb_buffer_pool_read_ahead_evicted | 0       |
| Innodb_buffer_pool_read_requests      | 60564   |
| Innodb_buffer_pool_reads              | 295     |
| Innodb_buffer_pool_wait_free          | 0       |
| Innodb_buffer_pool_write_requests     | 0       |
| Innodb_data_fsyncs                    | 3       |
| Innodb_data_pending_fsyncs            | 0       |
| Innodb_data_pending_reads             | 0       |
| Innodb_data_pending_writes            | 0       |
| Innodb_data_read                      | 7016448 |
| Innodb_data_reads                     | 305     |
| Innodb_data_writes                    | 3       |
| Innodb_data_written                   | 1536    |
| Innodb_dblwr_pages_written            | 0       |
| Innodb_dblwr_writes                   | 0       |
| Innodb_have_atomic_builtins           | ON      |
| Innodb_log_waits                      | 0       |
| Innodb_log_write_requests             | 0       |
| Innodb_log_writes                     | 1       |
| Innodb_os_log_fsyncs                  | 3       |
| Innodb_os_log_pending_fsyncs          | 0       |
| Innodb_os_log_pending_writes          | 0       |
| Innodb_os_log_written                 | 512     |
| Innodb_page_size                      | 16384   |
| Innodb_pages_created                  | 0       |
| Innodb_pages_read                     | 294     |
| Innodb_pages_written                  | 0       |
| Innodb_row_lock_current_waits         | 0       |
| Innodb_row_lock_time                  | 0       |
| Innodb_row_lock_time_avg              | 0       |
| Innodb_row_lock_time_max              | 0       |
| Innodb_row_lock_waits                 | 0       |
| Innodb_rows_deleted                   | 0       |
| Innodb_rows_inserted                  | 0       |
| Innodb_rows_read                      | 0       |
| Innodb_rows_updated                   | 0       |
| Innodb_truncated_status_writes        | 0       |
+---------------------------------------+---------+
45 rows in set (0.02 sec)
Gewijzigd op 21/09/2012 11:09:00 door John D
 
Write Down

Write Down

21/09/2012 11:14:02
Quote Anchor link
Je kan je tabellen gelijk omzetten naar InnoDB. Zonder gegevens te verliezen zelfs. Je kan het bijvoorbeeld met een tool zoals phpMyAdmin.
 
Sander Z

Sander Z

21/09/2012 11:17:22
Quote Anchor link
Kijk, ik heb van het weekend weer genoeg te doen! :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.