Sling Academy
Home/SQLite/How to Update Multiple Records in SQLite

How to Update Multiple Records in SQLite

Last updated: December 07, 2024

SQLite is a powerful and lightweight database engine that is popular for use in mobile applications and small-scale projects. One common task you might encounter is the need to update multiple records in a SQLite database. This article will guide you through the process of updating multiple records efficiently using various techniques in SQLite.

Understanding Updating in SQLite

Updating records in SQLite involves changing the values of fields in your database tables. Typically, you’d perform updates using the UPDATE statement, which is a SQL keyword. Here’s a basic example:

UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;

This statement modifies one or more columns for rows that meet the specified condition. To update multiple rows effectively, you need to ensure that the WHERE clause correctly identifies all targeted records.

Updating Multiple Records Using a Simple WHERE Clause

One straightforward method to update multiple rows is by employing a simple WHERE clause:

UPDATE employees
SET status = 'active'
WHERE department = 'Sales';

In this example, all employees in the 'Sales' department have their status set to 'active'. The condition includes all rows that have 'Sales' as their department, making it easy to update multiple records at once.

Using IN Keyword for Specific Multiple Records

If you need to update specific rows with precise values in one execution, you can use the IN keyword:

UPDATE employees
SET department = 'Support'
WHERE employee_id IN (1, 3, 5, 7);

This update changes the department to 'Support' for employees with IDs 1, 3, 5, and 7. The IN clause allows specifying several specific IDs.

Utilizing CASE Statement for Conditional Updates

In some cases, you might want to conditionally update rows with different values. SQLite’s CASE statement accommodates this requirement:

UPDATE employees
SET status = CASE
  WHEN years_of_service > 10 THEN 'Senior'
  WHEN years_of_service > 5 THEN 'Junior'
  ELSE 'Trainee'
END;

In this statement, employees are labeled 'Senior', 'Junior', or 'Trainee' based on their years of service. This approach economizes SQL queries by rolling similar updates into a single command.

Updating Using a Join

At times, updating records might require information from another table. You can achieve this with a join:

UPDATE employees
SET employees.salary =
  (SELECT averages.salary
  FROM averages
  WHERE employees.role = averages.role)
WHERE EXISTS
  (SELECT * FROM averages
   WHERE employees.role = averages.role);

This update copies salary data from the averages table into the employees table, basing the updated salary on employee roles. Here, we ensure that every role listed in the averages table updates the matches in the employees table.

Efficiently Running Batch Updates via Scripting

When operating outside a single query environment, such as within an application using Python, you might resort to scripting to handle large batch updates.

import sqlite3

# Connect to SQLite database
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

# Prepare a batch of updates
updates = [
    ("Sales", 'offered'),
    ("Marketing", 'proposed'),
    ...
]

# Execute updates in a loop
for department, new_status in updates:
    cursor.execute(
        """
        UPDATE projects
        SET status = ?
        WHERE department = ?
        """,
        (new_status, department)
    )

# Commit and close connection
conn.commit()
conn.close()

This script defines a list of updates where each entry specifies a department and the corresponding new status. By looping through this list, the script updates status appropriately and increases performance by executing updates as batch processes with committed transactions.

Wrap-up

We explored multiple ways to update records in SQLite, from basic WHERE clauses to complex, conditional statements. Understanding and applying these methodologies allows you efficiently manage databases, whether you’re working on a large project or prototyping smaller apps. Always ensure to test batch updates, use transactions to manage commits, and back up your database to safeguard data integrity.

Next Article: Deleting Data in SQLite: A Quick Guide

Previous Article: SQLite UPDATE Statement: Syntax and Examples

Series: CRUD Operations in SQLite

SQLite

You May Also Like

  • How to use regular expressions (regex) in SQLite
  • SQLite UPSERT tutorial (insert if not exist, update if exist)
  • What is the max size allowed for an SQLite database?
  • SQLite Error: Invalid Value for PRAGMA Configuration
  • SQLite Error: Failed to Load Extension Module
  • SQLite Error: Data Type Mismatch in INSERT Statement
  • SQLite Warning: Query Execution Took Longer Than Expected
  • SQLite Error: Cannot Execute VACUUM on Corrupted Database
  • SQLite Error: Missing Required Index for Query Execution
  • SQLite Error: FTS5 Extension Malfunction Detected
  • SQLite Error: R-Tree Node Size Exceeds Limit
  • SQLite Error: Session Extension: Invalid Changeset Detected
  • SQLite Error: Invalid Use of EXPLAIN Statement
  • SQLite Warning: Database Connection Not Closed Properly
  • SQLite Error: Cannot Attach a Database in Encrypted Mode
  • SQLite Error: Insufficient Privileges for Operation
  • SQLite Error: Cannot Bind Value to Parameter
  • SQLite Error: Maximum String or Blob Size Exceeded
  • SQLite Error: Circular Reference in Foreign Key Constraints