Variables and control flow in MySQL - Time & Space Complexity
When using variables and control flow in MySQL, it's important to see how the steps grow as data grows.
We want to know how the number of operations changes when the input size changes.
Analyze the time complexity of the following code snippet.
DECLARE done INT DEFAULT FALSE;
DECLARE counter INT DEFAULT 0;
DECLARE id_val INT;
DECLARE cur CURSOR FOR SELECT id FROM users;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO id_val;
IF done THEN
LEAVE read_loop;
END IF;
SET counter = counter + 1;
END LOOP;
CLOSE cur;
This code uses a cursor to loop through all user IDs, incrementing a counter for each row, thereby counting how many rows it processes.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each row returned by the cursor.
- How many times: Once for each row in the users table.
As the number of rows in the users table grows, the loop runs more times.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 loop steps |
| 100 | About 100 loop steps |
| 1000 | About 1000 loop steps |
Pattern observation: The number of steps grows directly with the number of rows.
Time Complexity: O(n)
This means the time to run grows in a straight line with the number of rows processed.
[X] Wrong: "Using variables and loops in MySQL always runs in constant time regardless of data size."
[OK] Correct: The loop runs once per row, so more rows mean more steps, not a fixed number.
Understanding how loops and variables affect query time helps you explain how your code scales with data size.
"What if we replaced the cursor loop with a single SQL aggregate function? How would the time complexity change?"
Practice
Solution
Step 1: Understand variable role in procedures
Variables hold temporary data only while the procedure runs.Step 2: Differentiate from permanent storage
Permanent data is stored in tables, not variables.Final Answer:
To store temporary data during procedure execution -> Option CQuick Check:
Variables = Temporary data [OK]
- Confusing variables with table data storage
- Thinking variables create database objects
- Assuming variables control user access
Solution
Step 1: Recall syntax for variable declaration
Use DECLARE variable_name data_type; to declare.Step 2: Assign value using SET
Use SET variable_name = value; after declaration.Final Answer:
DECLARE x INT; SET x = 10; -> Option BQuick Check:
DECLARE then SET = correct syntax [OK]
- Using SET before DECLARE
- Combining declaration and assignment incorrectly
- Wrong order of keywords
DECLARE counter INT DEFAULT 1;
WHILE counter <= 3 DO
SET counter = counter + 1;
END WHILE;
SELECT counter;
What will be the output of the
SELECT counter; statement?Solution
Step 1: Trace the WHILE loop increments
Counter starts at 1, increments by 1 each loop until counter > 3.Step 2: Count loop iterations and final value
Loop runs while counter=1,2,3; increments to 4 and stops.Final Answer:
4 -> Option DQuick Check:
Counter ends at 4 after loop [OK]
- Assuming counter stops at 3
- Forgetting counter increments before condition check
- Thinking syntax error without BEGIN...END in snippet
DECLARE total INT;
SET total = 0
WHILE total < 5 DO
SET total = total + 1;
END WHILE;
Solution
Step 1: Check statement endings
SET total = 0 is missing a semicolon at the end.Step 2: Validate syntax for DECLARE and WHILE
DECLARE is valid before BEGIN, and WHILE syntax is correct.Final Answer:
Missing semicolon after SET total = 0 -> Option AQuick Check:
Every statement needs semicolon [OK]
- Ignoring missing semicolon errors
- Thinking DECLARE must be inside BEGIN...END always
- Misreading WHILE syntax
Solution
Step 1: Check loop and variable initialization
DECLARE count_even INT DEFAULT 0; DECLARE i INT DEFAULT 1; WHILE i <= 10 DO IF i % 2 = 0 THEN SET count_even = count_even + 1; END IF; SET i = i + 1; END WHILE; SELECT count_even; correctly declares variables and initializes them.Step 2: Verify condition and increment logic
DECLARE count_even INT DEFAULT 0; DECLARE i INT DEFAULT 1; WHILE i <= 10 DO IF i % 2 = 0 THEN SET count_even = count_even + 1; END IF; SET i = i + 1; END WHILE; SELECT count_even; uses WHILE loop from 1 to 10, checks even with modulo, increments count and i properly.Step 3: Identify errors in other options
DECLARE count_even INT; SET count_even = 0; FOR i IN 1..10 DO IF i % 2 = 0 THEN SET count_even = count_even + 1; END IF; END FOR; SELECT count_even; uses invalid FOR syntax; C counts odd numbers; D uses division instead of modulo.Final Answer:
Option A code correctly counts even numbers between 1 and 10 -> Option AQuick Check:
Use WHILE + modulo for even check [OK]
- Using invalid FOR loop syntax in MySQL
- Confusing modulo (%) with division (/)
- Counting odd numbers instead of even
Ready to prove it?
Pass the test and this pattern moves unknown
