Hallöchen,
ich habe eine ziemlich einfache MySql Datenbank. (Ich vereinfache mal die Anzahl der Spalten)
Tabelle1 = "tbl_bestellnummern" mit den Spalten ( Bestellnummer(Primary-Key), Warentarifnummer )
Tabelle2 = "tbl_preise" mit den Spalten (id (Primary-Key), Bestellnummer , Lieferant , Preis)
Ich denke das ist so ziemlich eindeutig wie die beiden Tabellen in Beziehung zu einander stehen.
Die Daten werden aktuell per Bulkloader in die Tabellen geschoben. Das sieht dann in etwa so aus:
Das klappt alles rasend schnell und die aktuell 85000 Datensätze sind in unter 1 Sekunde in der Tabelle .
Jetzt aber zum Problem:
Wenn ich zukünftig die Daten in der "tbl_Preise" updaten will ( dazu wird es einfach immer eine neue Datei geben ) dann zählt mysql natürlich automatisch die "id" weiter hoch weil diese auf Autoincrement steht.
Heißt: Mit jedem Upload, verdoppel ich auch die Anzahl der Datensätze.
In der ersten Tabelle "tbl_bestellnummern" ist dies noch egal, weil hier jede Bestellnummer eh nur einmal vorkommt und ich mittels -> "bulkloader.ConflictOption = MySql.Data.MySqlClient.MySqlBulkLoaderConflictOption.Replace" den Primärschlüssel ja auch auch schon habe und es somit auch keine Verdopplung sondern ein Update gibt.
Bei der 2ten Tabelle stehe ich jetzt ein wenig auf dem Schlauch. Ich möchte nämlich gerne die Performance vom Bulkloader behalten und trotzdem ein Update machen können aber mit Selektion auf die Bestellnummer, da ich die id ja nicht kenne. Quasi:
bulkloader.load where tbl_preise.Bestellnummer=MyFile.Bestellnummer (Ich hoffe die Darstellung ist klar)
Geht das überhaupt mit dem Bulkloader?
Danke
ich habe eine ziemlich einfache MySql Datenbank. (Ich vereinfache mal die Anzahl der Spalten)
Tabelle1 = "tbl_bestellnummern" mit den Spalten ( Bestellnummer(Primary-Key), Warentarifnummer )
Tabelle2 = "tbl_preise" mit den Spalten (id (Primary-Key), Bestellnummer , Lieferant , Preis)
Ich denke das ist so ziemlich eindeutig wie die beiden Tabellen in Beziehung zu einander stehen.
Die Daten werden aktuell per Bulkloader in die Tabellen geschoben. Das sieht dann in etwa so aus:
VB.NET-Quellcode
- Dim cols As String() = {"Bestellnummer", "Lieferant", "Preis"}
- Dim myfile As String = "C:\Users\MTK\Desktop\preise.csv"
- Dim rows As Integer = 0
- Using con2 As New MySqlConnection(sqlconnectionstring)
- Dim bulkloader = New MySqlBulkLoader(con2)
- bulkloader.TableName = "tbl_preise"
- bulkloader.FieldTerminator = ";"
- bulkloader.LineTerminator = "\r\n"
- bulkloader.FileName = myfile
- bulkloader.NumberOfLinesToSkip = 1
- 'bulkloader.ConflictOption = MySql.Data.MySqlClient.MySqlBulkLoaderConflictOption.Replace
- bulkloader.Columns.Clear()
- For Each s In cols
- bulkloader.Columns.Add(s)
- Next
- rows = bulkloader.Load()
- End Using
Das klappt alles rasend schnell und die aktuell 85000 Datensätze sind in unter 1 Sekunde in der Tabelle .
Jetzt aber zum Problem:
Wenn ich zukünftig die Daten in der "tbl_Preise" updaten will ( dazu wird es einfach immer eine neue Datei geben ) dann zählt mysql natürlich automatisch die "id" weiter hoch weil diese auf Autoincrement steht.
Heißt: Mit jedem Upload, verdoppel ich auch die Anzahl der Datensätze.
In der ersten Tabelle "tbl_bestellnummern" ist dies noch egal, weil hier jede Bestellnummer eh nur einmal vorkommt und ich mittels -> "bulkloader.ConflictOption = MySql.Data.MySqlClient.MySqlBulkLoaderConflictOption.Replace" den Primärschlüssel ja auch auch schon habe und es somit auch keine Verdopplung sondern ein Update gibt.
Bei der 2ten Tabelle stehe ich jetzt ein wenig auf dem Schlauch. Ich möchte nämlich gerne die Performance vom Bulkloader behalten und trotzdem ein Update machen können aber mit Selektion auf die Bestellnummer, da ich die id ja nicht kenne. Quasi:
bulkloader.load where tbl_preise.Bestellnummer=MyFile.Bestellnummer (Ich hoffe die Darstellung ist klar)
Geht das überhaupt mit dem Bulkloader?
Danke