MySQL
Reference for working with MySQL.
For database, table and column names that are reserved words or irregular names, surround the names with backticks `. For string values, wrap the values with single ' or double " quotes.
If you are operating on a local MySQL database, <host> in the examples below will be localhost.
Install MySQL Server
Linux
sudo apt-get install mysql-servermacOS
brew install mysqlSecure MySQL installation
mysql_secure_installationmacOS post install instructions via homebrew
unset TMPDIR
mysql_install_db
mysql.server start
mysql_secure_installationMySQL Information
Show installed MySQL version
mysql -VControl MySQL Server
Linux
service mysql start | stop | restart | statusmacOS
mysql.server start | stop | restart | status
mysql.server reload | force-reloadRun MySQL as a background service (Homebrew / macOS)
brew services start mysql@<version>macOS homebrew executable location
/usr/local/Cellar/mysql/<version>/support-filesLog In/Out
Log into MySQL as root
mysql -u root -pLog into MySQL as <user>
mysql -u <user> -pExit MySQL
mysql> exitDatabase Files
Linux
/var/lib/mysqlmacOS
/usr/local/var/mysqlReport total size of MySQL databases
sudo du -skh <mysql-directory>Manage Users
Create a user
CREATE USER '<user>'@'<host>' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;Delete a user
DROP USER '<user>'@'<host>';Change a user's password (as root)
SET PASSWORD FOR '<user>'@'<host>' = PASSWORD('<password>');Show list of users
SELECT User FROM mysql.user;Manage Privileges
Assign database privileges
Privileges:
SELECT - Read only
INSERT - Insert rows/data
UPDATE - Change inserted rows/data
DELETE - Delete drop rows of data
CREATE - Create new tables
ALTER - Change table/column names
DROP - Drop columns/tables
Grant all privileges
GRANT ALL PRIVILEGES ON <database>.* TO '<user>'@'<host>';
FLUSH PRIVILEGES;Grant general privileges
GRANT SELECT, INSERT, UPDATE, DELETE ON <database>.* TO '<user>'@'<host>';
FLUSH PRIVILEGES;Grant table privileges
GRANT CREATE, DROP, ALTER ON <database>.* TO '<user>'@'<host>';Revoke all privileges
REVOKE ALL ON <database>.* FROM '<user>'@'<host>';Revoke specific privileges
REVOKE DELETE, INSERT ON <database>.* FROM '<user>'@'<host>';Show privileges
SHOW GRANTS FOR '<user>'@'<host>';Navigate Databases and Tables
Show list of available databases
SHOW DATABASES;Select database to use for subsequent SQL commands
USE <database>;Show tables for selected database
SHOW TABLES;Show the column names and column types for a table
DESCRIBE <table>;Show all rows that exist in a column
SELECT * FROM <column>;Create and Delete databases
Create a new database
CREATE DATABASE <database>;Delete an existing database
DROP DATABASE <database>;Create, Delete and Alter Tables
Create a table and columns
CREATE TABLE <table> (<column> <type> <settings>);Create a table and columns (example)
CREATE TABLE <table> (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, <column> VARCHAR(45));Rename table
RENAME TABLE <table> to <new table>;Delete table
DROP TABLE <table>;Add table column
ALTER TABLE <table> ADD <column> <type> <settings>;Add table column in location (example)
ALTER TABLE <table> ADD <new column> VARCHAR(45) NULL AFTER `<column>`;Insert record
INSERT INTO <table> (<column>, <other column>) VALUES ('<value>', '<other value>');Select, Update and Delete Rows
Select records
SELECT * FROM <table>;Update record
UPDATE <table> SET <column> = '<value>';Update record with condition
UPDATE <table> SET <column> = '<value>' WHERE <table>.<other column> = <condition>;Delete all rows
DELETE FROM <table>;Delete specific record
DELETE FROM <table> WHERE <table>.<column> = '<value>';Delete all non-matching records
DELETE FROM <table> WHERE <table>.<column> != '<value>';Using Wildcards
Wildcards via % can be used for grants on database names (literal underscores must be escaped \_)
Grant select for databases that match foo_* (eg. foo_bar, foo_qux)
GRANT SELECT ON `foo\_%`.* TO '<user>'@'<host>';Revoke all for foo_*
REVOKE ALL ON `foo\_%`.* TO '<user>'@'<host>';Note: Grants and revokes made in this manner must match the same wildcard value (eg. foo\_%)
MySQL Database Import / Export
Export database
mysqldump -u root -p <database> > <file.sql>Export database (and include CREATE DATABASE and USE commands)
mysqldump -u root -p --databases <database> > <file.sql>Export multiple databases
mysqldump -u root -p --databases <database1> <database2> > <file.sql>Export all databases
mysqldump -u root -p --all-databases > <file.sql>Import database
mysqladmin -u root -p create <database>
mysql -u root -p <database> < <file.sql>Executing .sql files
mysql> source <file.sql>Alternative way to execute .sql files
mysql> \. <file.sql>Output MySQL settings
mysql> \sRename Database
mysqldump -u root -p -v <database> > <file.sql>
mysqladmin -u root -p create <new database>
mysql -u root -p <new database> < <file.sql>Check Database Configuration
Show current character set configuration
SHOW VARIABLES LIKE 'char%';Show database variables
mysqladmin -u <user> -p variablesLast updated