1961
MySQLERRORNotableViewHIGH confidence

View contains a recursive reference

Production Risk

None — view creation is rejected.

What this means

A view definition references itself directly or indirectly, creating a recursive view. MySQL does not support recursive views.

Why it happens
  1. 1CREATE VIEW v AS SELECT * FROM v — direct self-reference.
  2. 2Circular view dependency: view A references view B which references view A.
How to reproduce
trigger — this will error
trigger — this will error
CREATE VIEW v AS SELECT * FROM v;

expected output

ERROR 1961 (HY000): View 'db'.'v' contains a recursive reference.

Fix

Use a CTE (WITH ... RECURSIVE) for recursive queries instead of recursive views

Use a CTE (WITH ... RECURSIVE) for recursive queries instead of recursive views
WITH RECURSIVE cte AS (
  SELECT id, parent_id FROM categories WHERE parent_id IS NULL
  UNION ALL
  SELECT c.id, c.parent_id FROM categories c JOIN cte ON c.parent_id = cte.id
)
SELECT * FROM cte;

Why this works

Recursive CTEs are the correct mechanism for hierarchical queries in MySQL 8.0+.

Version notes

Sources
Official documentation ↗

MySQL 8.0 — 1961 ER_VIEW_RECURSIVE

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All MySQL errors