AI Generate MySQL docs instantly

MySQL Cheat Sheet

Quick reference guide with copy-paste ready code snippets

Try DocuWriter Free

Data Types

5 snippets

MySQL-specific types

AUTO_INCREMENT

CREATE TABLE users (
  id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL
);

ENUM & SET

CREATE TABLE shirts (
  size ENUM('S','M','L','XL') DEFAULT 'M',
  colors SET('red','green','blue')
);

JSON

CREATE TABLE events (
  id INT AUTO_INCREMENT PRIMARY KEY,
  data JSON NOT NULL
);

TIMESTAMP vs DATETIME

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
event_date DATETIME  -- No auto-update, no timezone conversion

BINARY / BLOB

token BINARY(16),  -- Fixed-length
file_data MEDIUMBLOB,  -- Up to 16MB
INSERT INTO t VALUES (UNHEX(REPLACE(UUID(), '-', '')));

JSON Functions

5 snippets

Query and modify JSON columns

Extract

SELECT data->'$.name' AS json_val,
       data->>'$.name' AS text_val
FROM events;

JSON_TABLE

SELECT * FROM events,
JSON_TABLE(data, '$.items[*]' COLUMNS (
  name VARCHAR(100) PATH '$.name',
  qty INT PATH '$.quantity'
)) AS jt;

Modify

UPDATE events SET data = JSON_SET(data, '$.status', 'active');
UPDATE events SET data = JSON_REMOVE(data, '$.temp');

Aggregate

SELECT JSON_ARRAYAGG(name) FROM users;
SELECT JSON_OBJECTAGG(key_col, val_col) FROM pairs;

Search

SELECT * FROM events
WHERE JSON_CONTAINS(data, '"click"', '$.type');
SELECT * FROM events WHERE JSON_SEARCH(data, 'one', 'click') IS NOT NULL;

String Functions

5 snippets

MySQL string manipulation

GROUP_CONCAT

SELECT author, GROUP_CONCAT(title ORDER BY title SEPARATOR ', ')
FROM books GROUP BY author;

REGEXP

SELECT * FROM users WHERE email REGEXP '^[a-z]+@gmail';
SELECT REGEXP_REPLACE('foo-bar', '-', '_');

FIND_IN_SET

SELECT * FROM shirts WHERE FIND_IN_SET('red', colors) > 0;

SUBSTRING_INDEX

SELECT SUBSTRING_INDEX('www.example.com', '.', 2);
-- 'www.example'
SELECT SUBSTRING_INDEX(email, '@', -1) AS domain FROM users;

String Padding

SELECT LPAD(id, 6, '0') AS padded FROM orders;
-- '000042'

Tired of looking up syntax?

DocuWriter.ai generates documentation and explains code using AI.

Try Free

Index Optimization

5 snippets

MySQL indexing strategies

EXPLAIN

EXPLAIN SELECT * FROM users WHERE email = 'a@b.com';
EXPLAIN ANALYZE SELECT * FROM orders WHERE total > 100;

Composite Index

CREATE INDEX idx_multi ON orders(user_id, created_at);
-- Leftmost prefix rule applies

FULLTEXT

ALTER TABLE posts ADD FULLTEXT INDEX ft_idx(title, body);
SELECT * FROM posts
WHERE MATCH(title, body) AGAINST('database' IN BOOLEAN MODE);

Index Hints

SELECT * FROM orders FORCE INDEX (idx_date)
WHERE created_at > '2026-01-01';

Invisible Index

ALTER TABLE users ALTER INDEX idx_name INVISIBLE;
-- Test performance without dropping
ALTER TABLE users ALTER INDEX idx_name VISIBLE;

Stored Programs

4 snippets

Procedures, functions, triggers

Procedure

DELIMITER //
CREATE PROCEDURE get_user(IN uid INT)
BEGIN
  SELECT * FROM users WHERE id = uid;
END //
DELIMITER ;
CALL get_user(1);

Function

CREATE FUNCTION full_name(first VARCHAR(50), last VARCHAR(50))
RETURNS VARCHAR(101) DETERMINISTIC
RETURN CONCAT(first, ' ', last);

Trigger

CREATE TRIGGER before_insert_user
BEFORE INSERT ON users FOR EACH ROW
SET NEW.created_at = NOW();

Event

CREATE EVENT cleanup_logs
ON SCHEDULE EVERY 1 DAY
DO DELETE FROM logs WHERE ts < NOW() - INTERVAL 30 DAY;

Administration

5 snippets

Useful MySQL commands

Process List

SHOW PROCESSLIST;
SELECT * FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep' ORDER BY TIME DESC;

Table Status

SHOW TABLE STATUS LIKE 'users';
SELECT table_name, table_rows, data_length
FROM information_schema.tables WHERE table_schema = DATABASE();

Users & Grants

CREATE USER 'app'@'%' IDENTIFIED BY 'secret';
GRANT SELECT, INSERT ON mydb.* TO 'app'@'%';
SHOW GRANTS FOR 'app'@'%';

Backup

mysqldump -u root -p mydb > backup.sql
mysqldump --single-transaction mydb | gzip > backup.sql.gz
mysql -u root -p mydb < backup.sql

Variables

SHOW VARIABLES LIKE 'innodb_buffer%';
SET GLOBAL max_connections = 200;
SET SESSION wait_timeout = 300;

More Cheat Sheets

FAQ

Frequently asked questions

What is a MySQL cheat sheet?

A MySQL cheat sheet is a quick reference guide containing the most commonly used syntax, functions, and patterns in MySQL. It helps developers quickly look up syntax without searching through documentation.

How do I learn MySQL quickly?

Start with the basics: variables, control flow, and functions. Use this cheat sheet as a reference while practicing. For faster learning, try DocuWriter.ai to automatically explain code and generate documentation as you learn.

What are the most important MySQL concepts?

Key MySQL concepts include variables and data types, control flow (if/else, loops), functions, error handling, and working with data structures like arrays and objects/dictionaries.

How can I document my MySQL code?

Use inline comments for complex logic, docstrings for functions and classes, and README files for projects. DocuWriter.ai can automatically generate professional documentation from your MySQL code using AI.

Related resources

Stop memorizing. Start shipping.

Generate MySQL Docs with AI

DocuWriter.ai automatically generates comments, docstrings, and README files for your code.

Auto-generate comments
Create README files
Explain complex code
API documentation
Start Free - No Credit Card

Join 33,700+ developers saving hours every week