As MySQL doesn’t have inherent support for updating more than one rows or records with a single update query as it does for insert query, in a situation which needs us to perform updating to tens of thousands or even millions of records, one update query for each row seems to be too much.
Reducing the number of SQL database queries is the top tip for optimizing SQL applications.
So, is there any other way around with just a few MySQL queries that equals to millions of single row update queries?
Yes, but you need a temporary table.
Step 1: Create a temporary table
This table should have 2 columns: 1) an ID column that references the original record’s primary key in the original table, 2) the column containing the new value to be updated with.
Creating this table, you can use insert queries as it conveniently inserts more than one rows at a time (with a single query) – actually, as many rows as you need, like 1000 a time.
Step 2: Transfer the new values from the temporary table to the intended table
Use the query below:
UPDATE original_table, temp_table SET original_table.update_column = temp_table.update_column WHERE original_table.id = temp_table.original_id
To transfer all the new values you have in the temporary table to the original table. After this, you have successfully updated the original table with much much less than a million queries, probably just a hundred or so.
Related Posts
- MySQL: Add Statistics Column for the Number Count of Records from Another Table
- MySQL: Insert if doesn’t exist otherwise update the existing row
- MySQL: Find Duplicate Entry / Rows / Records
- MySQL: Deleting Duplicate Rows or Records | Selecting Unique Rows into A New Table
- MySQL: Replace Substring with Another String – the MySQL String Replace Function

{ 3 comments… read them below or add one }
If all the record that want to be updated is the same, just
UPDATE myTable SET type=”A”, model=”B” WHERE id IN ( 1, 2, 3)
Nice!
hello i want to ask if how can i able to update one single row in different tables. i use php and mysql as my repository