Bird
Raised Fist0
MySQLquery~5 mins

Cursors for row iteration in MySQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a cursor in MySQL?
A cursor is a database object used to retrieve and process rows one at a time from a result set, allowing row-by-row operations.
Click to reveal answer
beginner
List the main steps to use a cursor in MySQL.
1. Declare the cursor with a SELECT statement.
2. Open the cursor.
3. Fetch rows one by one.
4. Close the cursor when done.
Click to reveal answer
beginner
Why do we need to close a cursor in MySQL?
Closing a cursor releases the memory and resources it uses. Not closing it can cause resource leaks and slow down the database.
Click to reveal answer
intermediate
What happens if you fetch from a cursor but no more rows are available?
MySQL raises the NOT FOUND condition, indicating there are no more rows to fetch.
Click to reveal answer
intermediate
Can you use a cursor to update rows while iterating in MySQL?
Yes, you can fetch rows with a cursor and then use UPDATE statements to modify those rows inside the loop.
Click to reveal answer
What is the first step when using a cursor in MySQL?
AOpen the cursor
BDeclare the cursor
CFetch a row
DClose the cursor
Which statement correctly closes a cursor named 'cur'?
ACLOSE cur;
BEND cur;
CSTOP cur;
DFINISH cur;
What condition indicates no more rows are available when fetching from a cursor?
AEMPTY
BNO ROWS
CEND OF DATA
DNOT FOUND
Can you fetch multiple rows at once using a cursor in MySQL?
ANo, cursors fetch one row at a time
BYes, cursors fetch all rows at once
CYes, but only two rows at a time
DOnly if you use a special option
What happens if you forget to close a cursor?
ANothing, it is safe to leave open
BThe cursor automatically closes after fetching
CResources remain allocated, causing potential issues
DThe database crashes
Explain how to use a cursor in MySQL to process rows one by one.
Think about the sequence of steps to handle each row individually.
You got /5 concepts.
    Describe why cursors are useful and when you might use them.
    Consider situations where you need to do something special with each row.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a cursor in MySQL?
      easy
      A. To create new tables dynamically
      B. To speed up bulk inserts
      C. To process query results row by row
      D. To backup the database automatically

      Solution

      1. Step 1: Understand cursor functionality

        Cursors allow you to handle each row of a query result individually instead of all at once.
      2. Step 2: Identify the correct purpose

        Processing rows one by one matches the cursor's main use, unlike speeding inserts or creating tables.
      3. Final Answer:

        To process query results row by row -> Option C
      4. Quick Check:

        Cursor = row-by-row processing [OK]
      Hint: Cursors = row-by-row handling, not bulk operations [OK]
      Common Mistakes:
      • Thinking cursors speed up inserts
      • Confusing cursors with backup tools
      • Assuming cursors create tables
      2. Which of the following is the correct order of cursor operations in MySQL?
      easy
      A. DECLARE, FETCH, OPEN, CLOSE
      B. DECLARE, OPEN, FETCH, CLOSE
      C. FETCH, DECLARE, OPEN, CLOSE
      D. OPEN, DECLARE, FETCH, CLOSE

      Solution

      1. Step 1: Recall cursor lifecycle

        First, you declare the cursor, then open it to start fetching rows, and finally close it when done.
      2. Step 2: Match the correct sequence

        Only DECLARE, OPEN, FETCH, CLOSE follows the correct order of cursor operations.
      3. Final Answer:

        DECLARE, OPEN, FETCH, CLOSE -> Option B
      4. Quick Check:

        Cursor order = DECLARE -> OPEN -> FETCH -> CLOSE [OK]
      Hint: Remember: Declare first, then open, fetch, and close last [OK]
      Common Mistakes:
      • Opening cursor before declaring
      • Fetching before opening
      • Closing before fetching all rows
      3. Consider this MySQL cursor code snippet inside a stored procedure:
      DECLARE done INT DEFAULT FALSE;
      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 @user_id;
        IF done THEN
          LEAVE read_loop;
        END IF;
        SELECT @user_id;
      END LOOP;
      CLOSE cur;

      What will this code output?
      medium
      A. It prints each user id from the users table one by one
      B. It prints only the first user id
      C. It causes a syntax error due to missing variable declaration
      D. It prints nothing because the loop never runs

      Solution

      1. Step 1: Analyze cursor fetching loop

        The cursor fetches each id from users table into @user_id, then prints it until no rows remain.
      2. Step 2: Understand handler and loop exit

        The handler sets done = TRUE when no more rows, causing loop to exit properly after printing all ids.
      3. Final Answer:

        It prints each user id from the users table one by one -> Option A
      4. Quick Check:

        Cursor loop prints all rows one by one [OK]
      Hint: Handler sets done; loop prints all fetched rows [OK]
      Common Mistakes:
      • Assuming only first row prints
      • Missing handler causes infinite loop
      • Confusing session variables with local variables
      4. You wrote this MySQL cursor code but it causes an infinite loop:
      DECLARE done INT DEFAULT FALSE;
      DECLARE cur CURSOR FOR SELECT name FROM employees;
      OPEN cur;
      read_loop: LOOP
        FETCH cur INTO @emp_name;
        IF done THEN
          LEAVE read_loop;
        END IF;
        SELECT @emp_name;
      END LOOP;
      CLOSE cur;

      What is the likely cause of the infinite loop?
      medium
      A. The SELECT statement inside loop causes the loop to restart
      B. Cursor was not declared before opening
      C. Variable @emp_name is not declared
      D. Missing CONTINUE HANDLER to set done = TRUE when no rows left

      Solution

      1. Step 1: Check for handler presence

        The code lacks a CONTINUE HANDLER to set done = TRUE when no more rows are fetched.
      2. Step 2: Understand loop exit condition

        Without setting done = TRUE, the IF condition never triggers LEAVE, causing infinite loop.
      3. Final Answer:

        Missing CONTINUE HANDLER to set done = TRUE when no rows left -> Option D
      4. Quick Check:

        No handler = infinite loop [OK]
      Hint: Always add handler to set done flag for loop exit [OK]
      Common Mistakes:
      • Forgetting CONTINUE HANDLER
      • Assuming loop exits automatically
      • Misplacing variable declarations
      5. You want to write a stored procedure that sums the salaries of all employees using a cursor. Which approach correctly uses a cursor to calculate the total salary?
      DECLARE done INT DEFAULT FALSE;
      DECLARE total_salary DECIMAL(10,2) DEFAULT 0;
      DECLARE cur CURSOR FOR SELECT salary FROM employees;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
      OPEN cur;
      read_loop: LOOP
        FETCH cur INTO @sal;
        IF done THEN
          LEAVE read_loop;
        END IF;
        SET total_salary = total_salary + @sal;
      END LOOP;
      CLOSE cur;
      SELECT total_salary;

      What is the expected output of this procedure?
      hard
      A. The sum of all employee salaries
      B. Syntax error due to missing variable declaration for @sal
      C. Zero, because total_salary is not updated correctly
      D. The procedure runs but returns NULL

      Solution

      1. Step 1: Verify declaration order and variables

        All local variables (done, total_salary) are declared before the cursor and handler. FETCH INTO @sal uses a session variable, which is valid.
      2. Step 2: Trace execution

        The loop fetches each salary, adds it to total_salary until the handler sets done=TRUE, then SELECT outputs the sum.
      3. Final Answer:

        The sum of all employee salaries -> Option A
      4. Quick Check:

        Cursor loop + handler + accumulation = total sum [OK]
      Hint: DECLARE order: locals first, then cursors, handlers. FETCH INTO @var OK [OK]
      Common Mistakes:
      • Declaring variables after cursors/handlers
      • Thinking @vars require DECLARE
      • Missing handler or wrong loop condition
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard