MySQL Commands Cheat Sheet

Tags

Quick reference MySQL commands you should know.

Connect MySQL

mysql -u  -p

mysql [db_name]

mysql -h  -P  -u  -p [db_name]

mysql -h  -u  -p [db_name]
                   
Browsing

SHOW DATABASES;
SHOW TABLES;
SHOW FIELDS FROM table / DESCRIBE table;
SHOW CREATE TABLE table;
SHOW PROCESSLIST;
KILL process_number;
                   
Select

SELECT * FROM table;
SELECT * FROM table1, table2;
SELECT field1, field2 FROM table1, table2;
SELECT ... FROM ... WHERE condition
SELECT ... FROM ... WHERE condition GROUP BY field;
SELECT ... FROM ... WHERE condition GROUP BY field HAVING condition2;
SELECT ... FROM ... WHERE condition ORDER BY field1, field2;
SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC;
SELECT ... FROM ... WHERE condition LIMIT 10;
SELECT DISTINCT field1 FROM ...
SELECT DISTINCT field1, field2 FROM ...
                   
Select - Join

SELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition;
SELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition;
SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ...
           
Conditions

field1 = value1
field1 <> value1
field1 LIKE 'value _ %'
field1 IS NULL
field1 IS NOT NULL
field1 IS IN (value1, value2)
field1 IS NOT IN (value1, value2)
condition1 AND condition2
condition1 OR condition2
           
Backup Database to SQL File

mysqldump -u Username -p dbNameYouWant > databasename_backup.sql
                       
Restore from backup SQL File

mysql -u Username -p dbNameYouWant < databasename_backup.sql;
                       
Repair Tables After Unclean Shutdown

mysqlcheck --all-databases;
mysqlcheck --all-databases --fast;
                       
Users and Privileges

CREATE USER 'user'@'localhost';
GRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
REVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions
FLUSH PRIVILEGES;
           

SET PASSWORD = PASSWORD('new_pass');
SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass');
SET PASSWORD = OLD_PASSWORD('new_pass')            
           

DROP USER 'user'@'host';          
           

Host ‘%’ indicates any host.        
           
Reset Root Password

$ /etc/init.d/mysql stop
                   

$ mysqld_safe --skip-grant-tables
                   

$ mysql # on another terminal
mysql> UPDATE mysql.user SET password=PASSWORD('new_pass') WHERE user='root';
                   

## Switch back to the mysqld_safe terminal and kill the process using Control + \
$ /etc/init.d/mysql start
                   
Your commands may vary depending on your OS.
Managing Indexes
Create an index on c1 and c2 of the t table

CREATE INDEX idx_name 
ON t(c1,c2);
           
Create a unique index on c3, c4 of the t table

CREATE UNIQUE INDEX idx_name
ON t(c3,c4)
            
Drop an index

DROP INDEX idx_name;
             
Managing Triggers
Create or modify a trigger

CREATE OR MODIFY TRIGGER trigger_name
WHEN EVENT
ON table_name TRIGGER_TYPE
EXECUTE stored_procedure;
				

WHEN

BEFORE
Invoke before the event occurs
AFTER
Invoke after the event occurs

EVENT

INSERT
Invoke for INSERT
UPDATE
Invoke for UPDATE
DELETE
Invoke for DELETE
Managing Views
Create a new view that consists of c1 and c2

CREATE VIEW v(c1,c2) 
AS
SELECT c1, c2
FROM t;
           
Create a new view with check option

CREATE VIEW v(c1,c2) 
AS
SELECT c1, c2
FROM t;
WITH [CASCADED | LOCAL] CHECK OPTION;
            
Create a recursive view

CREATE RECURSIVE VIEW v 
AS
select-statement -- anchor part
UNION [ALL]
select-statement; -- recursive part
             
Create a temporary view

CREATE TEMPORARY VIEW v 
AS
SELECT c1, c2
FROM t;
             
Delete a view

DROP VIEW view_name;

             
Database Commands
CREATE DATABASE db ;
Create database
SHOW DATABASES;
List databases
USE db;
Switch to db
CONNECT db ;
Switch to db
DROP DATABASE db;
Delete db
Table Commands
SHOW TABLES;
List tables for current db
SHOW FIELDS FROM t;
List fields for a table
DESC t;
Show table structure
SHOW CREATE TABLE t;
Show create table sql
TRUNCATE TABLE t;
Remove all data in a table
DROP TABLE t;
Delete table
Proccess Commands
show processlist;
List processes
kill pid;
kill process
Other Commands
exit or \q
Exit MySQL session
Insert

INSERT INTO table1 (field1, field2) VALUES (value1, value2);
                       
Delete

DELETE FROM table1 / TRUNCATE table1
DELETE FROM table1 WHERE condition
DELETE FROM table1, table2 WHERE table1.id1 =
       table2.id2 AND condition
                       
Update

UPDATE table1 SET field1=new_value1 WHERE condition;
UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... 
       WHERE table1.id1 = table2.id2 AND condition;
                       
Create / Open / Delete Database

CREATE DATABASE DatabaseName;
CREATE DATABASE DatabaseName CHARACTER SET utf8;
USE DatabaseName;
DROP DATABASE DatabaseName;
ALTER DATABASE DatabaseName CHARACTER SET utf8;
                       
Create Table

CREATE TABLE table (field1 type1, field2 type2);
CREATE TABLE table (field1 type1, field2 type2, INDEX (field));
CREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1));
CREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1,field2));
                       

CREATE TABLE table1 (fk_field1 type1, field2 type2, ...,
  FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))
    [ON UPDATE|ON DELETE] [CASCADE|SET NULL]
                       

CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,
 FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))
                       

CREATE TABLE table IF NOT EXISTS;
                       

CREATE TEMPORARY TABLE table;
                       
Drop Table

DROP TABLE table;
DROP TABLE IF EXISTS table;
DROP TABLE table1, table2, ...
                    
Alter Table

ALTER TABLE table MODIFY field1 type1
ALTER TABLE table MODIFY field1 type1 NOT NULL ...
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ...
ALTER TABLE table ALTER field1 SET DEFAULT ...
ALTER TABLE table ALTER field1 DROP DEFAULT
ALTER TABLE table ADD new_name_field1 type1
ALTER TABLE table ADD new_name_field1 type1 FIRST
ALTER TABLE table ADD new_name_field1 type1 AFTER another_field
ALTER TABLE table DROP field1
ALTER TABLE table ADD INDEX (field);
                    
Change Table Field Order

ALTER TABLE table MODIFY field1 type1 FIRST
ALTER TABLE table MODIFY field1 type1 AFTER another_field
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST
ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER another_field
                    
Select Statments
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;
           
Aggregate Functions

SELECT COUNT(id) FROM users;
SELECT MAX(age) FROM users;
SELECT MIN(age) FROM users;
SELECT SUM(age) FROM users;
SELECT UCASE(first_name), LCASE(last_name) FROM users;
            
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
comments.body,
posts.title,
users.first_name,
users.last_name
FROM comments
INNER JOIN posts on posts.id = comments.post_id
INNER JOIN users on users.id = comments.user_id
ORDER BY posts.title;
             
INNER 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;
             
MySQL Locations
/usr/local/mysql/bin
Mac
/Program Files/MySQL/MySQL version /bin
Windows
/xampp/mysql/bin
Xampp

Add mysql to your PATH

# Current Session
export PATH=${PATH}:/usr/local/mysql/bin
# Permanantly
echo 'export PATH="/usr/local/mysql/bin:$PATH"' >> ~/.bash_profile
             
Try These Related Tools



Commenting your code is like cleaning your bathroom you never want to do it, but it really does create a more pleasant experience for you and your guests.

Ryan Campbell