Database-Specific Features
MySQL: JSON Functions: Examples
User Preferences with JSON and Generated Columns intermediate Application needs to store user preferences (theme, language, notifications). Traditional approach
User Preferences with JSON and Generated Columns
intermediate
Application needs to store user preferences (theme, language, notifications). Traditional approach: Multiple columns (requires ALTER TABLE for new preferences). Solution: Use JSON column with generated columns for frequently queried fields.
-- Create users table with JSON preferences
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
preferences JSON,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Add generated columns for frequently queried fields
ALTER TABLE users
ADD COLUMN theme VARCHAR(20) AS (preferences->>'$.theme') STORED,
ADD COLUMN language VARCHAR(10) AS (preferences->>'$.language') STORED;
-- Create indexes on generated columns
CREATE INDEX idx_users_theme ON users(theme);
CREATE INDEX idx_users_language ON users(language);
-- Insert users with JSON preferences
INSERT INTO users (email, preferences) VALUES
(
'john@example.com',
JSON_OBJECT(
'theme', 'dark',
'language', 'en',
'notifications', JSON_OBJECT(
'email', true,
'sms', false,
'push', true
),
'timezone', 'UTC'
)
),
(
'jane@example.com',
JSON_OBJECT(
'theme', 'light',
'language', 'es',
'notifications', JSON_OBJECT(
'email', false,
'sms', true,