Skip to content

Instantly share code, notes, and snippets.

@danielsource
Forked from bradtraversy/mysql_cheat_sheet.md
Last active June 11, 2025 00:23
Show Gist options
  • Save danielsource/31e7dbe4deae4f4ad03bbe710c93f094 to your computer and use it in GitHub Desktop.
Save danielsource/31e7dbe4deae4f4ad03bbe710c93f094 to your computer and use it in GitHub Desktop.
MySQL/MariaDB Cheatsheet

Documentation

SQL tutorials (not only for MySQL)

  • SQLBolt (web)
  • GalaXQL 3.0 (web)
  • PostgreSQL Exercises (web)
  • MySQL Course for Beginners (YouTube)

Cheatsheet

Root user login (on Debian 12)

sudo mysql -u root

User login with password prompt

mysql -u someuser -p

Show users

SELECT user, host FROM mysql.user;

Create user

CREATE USER 'someuser'@'localhost' IDENTIFIED BY 'somepassword';

Grant all privileges on all databases

GRANT ALL PRIVILEGES ON * . * TO 'someuser'@'localhost';
FLUSH PRIVILEGES;

Show grants

SHOW GRANTS FOR 'someuser'@'localhost';

Remove grants

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'someuser'@'localhost';

Delete user

DROP USER 'someuser'@'localhost';

Exit

exit

Show help

help
help SELECT
help CREATE TABLE

Show databases

SHOW DATABASES;
SHOW SCHEMAS;

Create database

CREATE DATABASE acme;

Delete database

DROP DATABASE acme;

Select database

USE acme;

Show current database

SELECT DATABASE();

Create table

CREATE TABLE users (
	id INT AUTO_INCREMENT PRIMARY KEY,
	first_name VARCHAR(100),
	last_name VARCHAR(100),
	email VARCHAR(50),
	password VARCHAR(20),
	location VARCHAR(100),
	dept VARCHAR(100),
	is_admin TINYINT(1),
	register_date DATETIME
);

Delete / drop table

DROP TABLE tablename;

Show tables

SHOW TABLES;

Show table columns

DESCRIBE tablename;
SHOW CREATE TABLE tablename;

Insert row / record

INSERT INTO users (first_name, last_name, email, password, location, dept, is_admin, register_date) VALUES ('Brad', 'Traversy', '[email protected]', '123456', 'Massachusetts', 'development', 1, NOW());

Insert multiple rows

INSERT INTO users (first_name, last_name, email, password, location, dept, is_admin, register_date) VALUES
('Fred', 'Smith', '[email protected]', '123456', 'New York', 'design', 0, NOW()), 
('Sara', 'Watson', '[email protected]', '123456', 'New York', 'design', 0, NOW()), 
('Will', 'Jackson', '[email protected]', '123456', 'Rhode Island', 'development', 1, NOW()),
('Paula', 'Johnson', '[email protected]', '123456', 'Massachusetts', 'sales', 0, NOW()),
('Tom', 'Spears', '[email protected]', '123456', 'Massachusetts', 'sales', 0, NOW());

Select

SELECT * FROM users;
SELECT first_name, last_name FROM users;

Where clause

SELECT * FROM users WHERE location = 'Massachusetts';
SELECT * FROM users WHERE location = 'Massachusetts' AND dept = 'sales';
SELECT * FROM users WHERE is_admin = 1;
SELECT * FROM users WHERE is_admin > 0;

Delete row

DELETE FROM users WHERE id = 6;

Update row

UPDATE users SET email = '[email protected]' WHERE id = 2;

Add new column

ALTER TABLE users ADD age VARCHAR(3);

Modify column

ALTER TABLE users MODIFY COLUMN age INT(3);

Order by (sort)

SELECT * FROM users ORDER BY last_name ASC;
SELECT * FROM users ORDER BY last_name DESC;

Concatenate columns

SELECT CONCAT(first_name, ' ', last_name) AS name, dept FROM users;

Select distinct rows

SELECT DISTINCT location FROM users;

Between (select inclusive range)

SELECT * FROM users WHERE age BETWEEN 20 AND 25;

Like (searching)

SELECT * FROM users WHERE dept LIKE 'd%';
SELECT * FROM users WHERE dept LIKE 'dev%';
SELECT * FROM users WHERE dept LIKE '%t';
SELECT * FROM users WHERE dept LIKE '%e%';

Not like

SELECT * FROM users WHERE dept NOT LIKE 'd%';

In

SELECT * FROM users WHERE dept IN ('design', 'sales');

New table with foreign key (posts)

CREATE TABLE posts (
	id INT AUTO_INCREMENT,
	user_id INT,
	title VARCHAR(100),
	body TEXT,
	publish_date DATETIME DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (id),
	FOREIGN KEY (user_id) REFERENCES users(id)
);

Add data to posts table

INSERT INTO posts (user_id, title, body) VALUES (1, 'Post One', 'This is post one'), (3, 'Post Two', 'This is post two'), (1, 'Post Three', 'This is post three'), (2, 'Post Four', 'This is post four'), (5, 'Post Five', 'This is post five'), (4, 'Post Six', 'This is post six'), (2, 'Post Seven', 'This is post seven'), (1, 'Post Eight', 'This is post eight'), (3, 'Post Nine', 'This is post none'), (4, 'Post Ten', 'This is post ten');

Inner join (or just JOIN)

SELECT
	users.first_name,
	users.last_name,
	posts.title,
	posts.publish_date
FROM users
INNER JOIN posts ON users.id = posts.user_id
ORDER BY posts.title;

New table with 2 foriegn keys

CREATE TABLE comments (
	id INT AUTO_INCREMENT,
	post_id INT,
	user_id INT,
	body TEXT,
	publish_date DATETIME DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (id),
	FOREIGN KEY (user_id) REFERENCES users(id),
	FOREIGN KEY (post_id) REFERENCES posts(id)
);

Add data to comments table

INSERT INTO comments (post_id, user_id, body) VALUES (1, 3, 'This is comment one'), (2, 1, 'This is comment two'), (5, 3, 'This is comment three'), (2, 4, 'This is comment four'), (1, 2, 'This is comment five'), (3, 1, 'This is comment six'), (3, 2, 'This is comment six'), (5, 4, 'This is comment seven'), (2, 3, 'This is comment seven');

Left join

SELECT
	comments.body,
	posts.title
FROM comments
LEFT JOIN posts ON posts.id = comments.post_id
ORDER BY posts.title;

Join multiple tables

SELECT
	c.body,
	p.title,
	u.first_name,
	u.last_name
FROM comments c
JOIN posts p on p.id = c.post_id
JOIN users u on u.id = c.user_id
ORDER BY p.title;

Aggregate functions

SELECT COUNT(id) FROM users;
SELECT MAX(age) FROM users;
SELECT MIN(age) FROM users;
SELECT SUM(age) FROM users;
SELECT UPPER(first_name), LOWER(last_name) FROM users;

Group by

SELECT age, COUNT(age) FROM users GROUP BY age;
SELECT age, COUNT(age) FROM users WHERE age > 20 GROUP BY age;
SELECT age, COUNT(age) FROM users GROUP BY age HAVING count(age) >= 2;

Import / export database

mysql -u user -p database < database_import.sql
mysqldump -u user -p database > database_export.sql
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment