1. Open your MySQL client (MySQL Workbench, DBeaver, or the MySQL CLI), connect to the database you want to visualize, and run this query:
SELECT JSON_OBJECT(
'tables', (
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'name', t.TABLE_NAME,
'columns', (
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'name', c.COLUMN_NAME,
'type', c.COLUMN_TYPE,
'not_null', (c.IS_NULLABLE = 'NO'),
'extra', c.EXTRA,
'default', c.COLUMN_DEFAULT
)
ORDER BY c.ORDINAL_POSITION
)
FROM information_schema.COLUMNS c
WHERE c.TABLE_SCHEMA = DATABASE()
AND c.TABLE_NAME = t.TABLE_NAME
),
'primary_key', (
SELECT JSON_ARRAYAGG(k.COLUMN_NAME ORDER BY k.ORDINAL_POSITION)
FROM information_schema.KEY_COLUMN_USAGE k
WHERE k.TABLE_SCHEMA = DATABASE()
AND k.TABLE_NAME = t.TABLE_NAME
AND k.CONSTRAINT_NAME = 'PRIMARY'
),
'unique_keys', (
SELECT JSON_ARRAYAGG(
JSON_OBJECT('constraint', s.CONSTRAINT_NAME, 'column', s.COLUMN_NAME)
ORDER BY s.CONSTRAINT_NAME, s.ORDINAL_POSITION
)
FROM information_schema.KEY_COLUMN_USAGE s
JOIN information_schema.TABLE_CONSTRAINTS uc
ON uc.CONSTRAINT_NAME = s.CONSTRAINT_NAME
AND uc.TABLE_SCHEMA = s.TABLE_SCHEMA
AND uc.TABLE_NAME = s.TABLE_NAME
WHERE s.TABLE_SCHEMA = DATABASE()
AND s.TABLE_NAME = t.TABLE_NAME
AND uc.CONSTRAINT_TYPE = 'UNIQUE'
)
)
ORDER BY t.TABLE_NAME
)
FROM information_schema.TABLES t
WHERE t.TABLE_SCHEMA = DATABASE()
AND t.TABLE_TYPE = 'BASE TABLE'
),
'foreign_keys', (
SELECT JSON_ARRAYAGG(
JSON_OBJECT(
'constraint', kcu.CONSTRAINT_NAME,
'table', kcu.TABLE_NAME,
'column', kcu.COLUMN_NAME,
'ref_table', kcu.REFERENCED_TABLE_NAME,
'ref_column', kcu.REFERENCED_COLUMN_NAME
)
ORDER BY kcu.CONSTRAINT_NAME, kcu.ORDINAL_POSITION
)
FROM information_schema.KEY_COLUMN_USAGE kcu
JOIN information_schema.TABLE_CONSTRAINTS tc
ON tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
AND tc.TABLE_SCHEMA = kcu.TABLE_SCHEMA
AND tc.TABLE_NAME = kcu.TABLE_NAME
WHERE kcu.TABLE_SCHEMA = DATABASE()
AND tc.CONSTRAINT_TYPE = 'FOREIGN KEY'
)
) AS result;
Copy the result (right-click the cell → Copy), paste it below, and click Visualize Schema.
Requires MySQL 8.0+ (uses JSON_ARRAYAGG, added in 8.0)
For a cleaner result from a live database, use the "Query your DB" tab.
What you get
Your full database renders as an interactive ER diagram, arranged automatically with an auto-layout. You can rearrange tables and enums by dragging them, and configure how the diagram is displayed under Show (for example, by hiding enums).
You can also iterate on your schema by chatting with VibeSchema’s AI, or by directly editing the DBML in the code panel.
When done, you can export your schema as a clean PNG or SVG image.