Skip to content

Auto-Save ​

Understanding how zxwdb's auto-save system works.

Overview ​

zxwdb automatically saves all changes directly to your MySQL/MariaDB database - no export/import needed!

Key Features:

  • ✅ Instant save to database
  • ✅ No manual save button
  • ✅ No export to SQL files
  • ✅ Works like MySQL Workbench
  • ✅ Undo/Redo support

How It Works ​

Direct Database Manipulation ​

Unlike diagram tools, zxwdb connects directly to your database:

Traditional Tools:
Design → Export SQL → Run SQL → Database Updated
(multiple steps, manual)

zxwdb:
Design → Database Updated
(instant, automatic)

What Gets Auto-Saved ​

Schema Changes:

  • ✅ Creating tables
  • ✅ Modifying columns
  • ✅ Adding/removing constraints
  • ✅ Creating relationships (FK)
  • ✅ Deleting relationships
  • ✅ Renaming tables

Data Changes:

  • ✅ Inserting rows
  • ✅ Updating rows
  • ✅ Deleting rows

Operations Flow ​

Creating a Table ​

User: Click "Create Table"
  ↓
Frontend: Open modal
  ↓
User: Fill form and click Save
  ↓
Frontend: Validate input
  ↓
API Call: POST /api/tables/:connectionId
  ↓
Backend: Execute CREATE TABLE
  ↓
MySQL: Table created instantly
  ↓
Backend: Query table structure
  ↓
Frontend: Add to canvas
  ↓
✅ Table saved and visible

SQL Executed:

sql
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Creating a Relationship ​

User: Drag from column handle
  ↓
Frontend: Detect target column
  ↓
User: Drop on target
  ↓
API Call: POST /api/relationships/:connectionId
  ↓
Backend: Execute ALTER TABLE ADD CONSTRAINT
  ↓
MySQL: Foreign key constraint created
  ↓
Frontend: Draw relationship line
  ↓
✅ FK saved and enforced

SQL Executed:

sql
ALTER TABLE posts
ADD CONSTRAINT fk_posts_user_id
FOREIGN KEY (user_id) 
REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE;

Modifying Data ​

User: Edit row in data browser
  ↓
Frontend: Inline editing mode
  ↓
User: Change value and save
  ↓
API Call: PUT /api/data/:connectionId/:table/:id
  ↓
Backend: Execute UPDATE
  ↓
MySQL: Row updated instantly
  ↓
Frontend: Show updated value
  ↓
✅ Data saved

SQL Executed:

sql
UPDATE users 
SET username = 'newname', email = 'new@email.com'
WHERE id = 1;

Safety Features ​

Transaction Support ​

All operations use transactions:

sql
START TRANSACTION;
  -- Your changes here
  ALTER TABLE posts ADD COLUMN status VARCHAR(20);
  UPDATE posts SET status = 'draft';
COMMIT; -- Only if successful

If any step fails:

sql
ROLLBACK; -- Undo all changes

Undo/Redo ​

Even with auto-save, you can undo:

javascript
// History tracking
{
  history: [
    { type: 'CREATE_TABLE', table: 'users' },
    { type: 'ADD_COLUMN', table: 'users', column: 'bio' },
    { type: 'CREATE_FK', from: 'posts', to: 'users' }
  ],
  historyIndex: 2
}

Undo (Cmd+Z):

  1. Get previous action
  2. Execute reverse operation
  3. Update database
  4. Update UI

Example:

Action: CREATE TABLE users
Undo:   DROP TABLE users

Action: ADD COLUMN bio
Undo:   ALTER TABLE users DROP COLUMN bio

Validation ​

Before saving, zxwdb validates:

Table Names:

  • Must be alphanumeric + underscore
  • Cannot start with number
  • Max 64 characters
  • No SQL keywords

Columns:

  • Valid data types
  • Length appropriate for type
  • Constraints compatible
  • No duplicate names

Relationships:

  • Data types match
  • Referenced table exists
  • No circular dependencies
  • Columns exist

Error Handling ​

If save fails:

javascript
try {
  await api.createTable(table)
  // Success: Table added to UI
} catch (error) {
  // Show error message
  showError(error.message)
  // UI reverts to previous state
  // Database unchanged
}

Common Errors:

  • Table already exists
  • Invalid column type
  • FK constraint violation
  • Insufficient permissions
  • Connection lost

Benefits ​

Instant Feedback ​

Traditional Workflow:

1. Design schema (5 min)
2. Export to SQL (30 sec)
3. Open SQL client (10 sec)
4. Run SQL (5 sec)
5. Check for errors (1 min)
6. Fix errors, repeat
Total: 7-10 minutes

zxwdb Workflow:

1. Design schema (5 min)
2. Auto-saved instantly
Total: 5 minutes

No Export/Import ​

Traditional:

  • Export SQL from tool
  • Save to file
  • Open in MySQL client
  • Run SQL file
  • Hope it works
  • Debug if errors

zxwdb:

  • Just design
  • It's already saved
  • Test immediately

Real-Time Collaboration ​

Multiple users can work simultaneously:

User A: Creates table "users"
  → Instantly in database
User B: Creates relationship to "users"
  → Works immediately (table exists)

Testing ​

Test your schema instantly:

1. Create tables (auto-saved)
2. Insert test data (auto-saved)
3. Run queries (live database)
4. See results immediately

Comparison ​

vs Diagram Tools (dbdiagram.io, draw.io) ​

FeatureDiagram Toolszxwdb
Save to DB❌ Manual SQL✅ Auto
Test queries❌ No✅ Yes
Live data❌ No✅ Yes
Export needed✅ Yes❌ No
Sync issues✅ Common❌ Never

vs MySQL Workbench ​

FeatureWorkbenchzxwdb
Save to DB✅ Direct✅ Direct
Modern UI❌ Old✅ Modern
Web-based❌ Desktop✅ Browser
Undo/Redo⚠️ Limited✅ Full
Theme❌ No✅ Dark/Light

vs phpMyAdmin ​

FeaturephpMyAdminzxwdb
Save to DB✅ Direct✅ Direct
Visual design❌ No✅ Yes
Drag FK❌ No✅ Yes
Modern❌ Old✅ Modern
Relationships⚠️ Basic✅ Visual

Best Practices ​

Design Workflow ​

✅ DO:

  1. Connect to development database
  2. Design and test
  3. Export SQL (Cmd+P) for production
  4. Run SQL in production

❌ DON'T:

  1. Connect directly to production
  2. Make changes without testing
  3. Skip backups

Backup Strategy ​

Even with auto-save:

bash
# Daily backup
mysqldump -u root -p mydb > backup.sql

# Before major changes
mysqldump -u root -p mydb > backup_before_schema_change.sql

Development vs Production ​

Development:

  • Use zxwdb directly
  • Auto-save enabled
  • Experiment freely
  • Undo mistakes

Production:

  • Export SQL from dev
  • Review changes
  • Run in migration
  • Never use zxwdb directly

Version Control ​

Track schema changes:

bash
# Export schema
zxwdb → Preview SQL (Cmd+P) → Copy

# Save to file
echo "CREATE TABLE..." > schema.sql

# Commit to git
git add schema.sql
git commit -m "Add users and posts tables"

Limitations ​

Current Limitations ​

No Offline Mode:

  • Requires active database connection
  • Changes saved immediately (can't queue)

No Batch Save:

  • Each action saves individually
  • Can't group changes into one transaction

No Conflict Resolution:

  • Multiple users may conflict
  • Last write wins

Future Improvements ​

Planned:

  • [ ] Offline mode with sync queue
  • [ ] Batch operations
  • [ ] Change preview before save
  • [ ] Optional manual save mode
  • [ ] Conflict detection
  • [ ] Change review system

Troubleshooting ​

Changes Not Saving ​

Check:

  1. Database connection active?
  2. User has write permissions?
  3. Table/column name valid?
  4. No constraint violations?
  5. Browser console for errors (F12)

Solutions:

bash
# Verify connection
mysql -u root -p -e "SELECT 1"

# Check permissions
SHOW GRANTS FOR 'your_user'@'localhost';

# Grant permissions
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

Slow Save Operations ​

Causes:

  • Large tables
  • Complex constraints
  • Slow database connection
  • Missing indexes

Solutions:

sql
-- Add indexes
CREATE INDEX idx_user_id ON posts(user_id);

-- Optimize tables
OPTIMIZE TABLE users, posts;

-- Check query performance
EXPLAIN SELECT * FROM posts WHERE user_id = 1;

Undo Not Working ​

Causes:

  • History limit reached (50 actions)
  • Complex operation
  • Manual SQL executed

Solutions:

  • Use database backup
  • Export schema before major changes
  • Keep transaction logs

FAQ ​

Is it safe to use auto-save? ​

Yes! All operations use transactions and can be undone. However:

  • ✅ Safe for development
  • ⚠️ Use caution in production
  • 🔒 Always backup first

Can I disable auto-save? ​

Not currently. Future versions may offer:

  • Manual save mode
  • Confirmation dialogs
  • Change preview

What if I make a mistake? ​

  1. Undo (Cmd+Z) - Reverses last action
  2. Restore from backup - Use mysqldump backup
  3. Re-import schema - Connect to backup database

Does it work offline? ​

No. zxwdb requires active database connection. Future versions may support:

  • Offline mode with sync queue
  • Local schema cache
  • Export/import for offline work

Released under the MIT License.