Afhandeling meerdere SQL queries
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?
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?
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?
Dan heb je geen gegevens die er voor de helft instaan
Ger van Steenderen op 21/09/2012 10:35:56:
Daarvoor bestaan transactions, zie hier
Dit kan niet als je database draait in MyISAM
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
Code (php)
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
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)
+---------------------------------------+---------+
| 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
Je kan je tabellen gelijk omzetten naar InnoDB. Zonder gegevens te verliezen zelfs. Je kan het bijvoorbeeld met een tool zoals phpMyAdmin.
Kijk, ik heb van het weekend weer genoeg te doen! :)