Lab 13: UPDATE and DELETE
Overview
Step 1: Setup
docker run -d --name mysql-lab -e MYSQL_ROOT_PASSWORD=rootpass mysql:8.0
for i in $(seq 1 30); do docker exec mysql-lab mysql -uroot -prootpass -e "SELECT 1" 2>/dev/null && break || sleep 2; done
docker exec mysql-lab mysql -uroot -prootpass << 'EOF'
CREATE DATABASE updatelab;
USE updatelab;
CREATE TABLE employees (
emp_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
dept VARCHAR(50) NOT NULL,
salary DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'active',
deleted_at TIMESTAMP NULL DEFAULT NULL, -- for soft delete
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (emp_id)
);
CREATE TABLE departments (
dept_id INT NOT NULL AUTO_INCREMENT,
dept_name VARCHAR(50) NOT NULL,
bonus_pct DECIMAL(5,2) DEFAULT 0,
PRIMARY KEY (dept_id)
);
INSERT INTO departments (dept_name, bonus_pct) VALUES
('Engineering', 10.0), ('Marketing', 7.5), ('HR', 5.0), ('Finance', 8.0);
INSERT INTO employees (name, dept, salary) VALUES
('Alice Johnson', 'Engineering', 95000),
('Bob Smith', 'Marketing', 72000),
('Carol Davis', 'Engineering', 110000),
('David Wilson', 'HR', 65000),
('Eve Martinez', 'Engineering', 98000),
('Frank Anderson', 'Marketing', 68000),
('Grace Taylor', 'HR', 70000),
('Henry Thomas', 'Engineering', 125000),
('Isabel Jackson', 'Finance', 88000),
('Jack White', 'Finance', 92000);
EOFStep 2: Basic UPDATE
Step 3: UPDATE with Expression
Step 4: UPDATE with JOIN
Step 5: Basic DELETE
Step 6: DELETE with Subquery
Step 7: TRUNCATE vs DELETE
Feature
DELETE
TRUNCATE
Step 8: Capstone — Soft Delete Pattern
Summary
Operation
Syntax
Notes
Last updated
