我想查看数据库中的所有表并删除具有特定id的所有行。当行数较小时,它可以正常工作。
在特定的表格中,行数为900000,这不再适用。
这是我目前的代码:
Using connection = New MySqlConnection(connectionString)
Try
connection.open()
If listOfTables.Count > 0 Then
For Each table As String In listOfTables
Dim sqlc As String = "DELETE FROM " & dbConnection.DbName & "." & table & " WHERE id=" & cNumber& ";"
Dim command3 As New MySqlCommand(sqlc , connection)
command3.ExecuteNonQuery()
command3.Dispose()
Next
connection.close()
End If
Catch ex As Exception
End Try
End Using
答案 0 :(得分:1)
从表中一次删除900000行不是一个好主意。为什么不在MYSQL中编写存储过程来完成您的工作。您可以尝试创建存储过程,该存储过程删除循环中1000行的块中的记录,并且在删除所有行之前不要停止。
尝试以下伪代码:
@counter = 0
LOOP
DELETE FROM Table_name
WHERE id BETWEEN @counter AND @counter +1000
AND "Your conditions"
SET @counter = @counter + 1000
sleep 2 -- Take a sleep before next
UNTIL end of table
它使用id列作为具有自动增量的主键
答案 1 :(得分:0)
我同意上面关于存储过程循环的回答。 但是,您从未提及是否收到错误/异常,或者它是否超时。 也许你应该:
Catch ex As Exception
MessageBox.Show(ex.Message)
connection.close()
End Try