Advanced

Views

Create View

CREATE VIEW view_name AS
SELECT column1, column2
FROM $TABLE_NAME
WHERE condition;

Create or Replace View

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2
FROM $TABLE_NAME
WHERE condition;

Select from View

SELECT * FROM view_name;

Show Views

SHOW FULL TABLES WHERE Table_type = 'VIEW';

Drop View

DROP VIEW view_name;

Alter View

ALTER VIEW view_name AS
SELECT column1, column2, column3
FROM $TABLE_NAME
WHERE condition;

View Information

SHOW CREATE VIEW view_name;

Stored Procedures and Functions

Create Stored Procedure

DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT, OUT param2 VARCHAR(50))
BEGIN
    -- procedure body
    SELECT column1 INTO param2 FROM $TABLE_NAME WHERE id = param1;
END //
DELIMITER ;

Call Stored Procedure

CALL procedure_name(value1, @output_var);

Create Function

DELIMITER //
CREATE FUNCTION function_name(param1 INT) RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE result INT;
    SELECT COUNT(*) INTO result FROM $TABLE_NAME WHERE id = param1;
    RETURN result;
END //
DELIMITER ;

Use Function

SELECT function_name(value) FROM $TABLE_NAME;

Show Procedures

SHOW PROCEDURE STATUS;

Show Functions

SHOW FUNCTION STATUS;

Drop Procedure

DROP PROCEDURE procedure_name;

Drop Function

DROP FUNCTION function_name;

Show Procedure Code

SHOW CREATE PROCEDURE procedure_name;

Show Function Code

SHOW CREATE FUNCTION function_name;

Triggers

Create BEFORE INSERT Trigger

DELIMITER //
CREATE TRIGGER trigger_name
BEFORE INSERT ON $TABLE_NAME
FOR EACH ROW
BEGIN
    -- trigger logic
    SET NEW.created_at = NOW();
END //
DELIMITER ;

Create AFTER INSERT Trigger

DELIMITER //
CREATE TRIGGER trigger_name
AFTER INSERT ON $TABLE_NAME
FOR EACH ROW
BEGIN
    -- trigger logic
    INSERT INTO audit_table (action, $TABLE_NAME, record_id) 
    VALUES ('INSERT', '$TABLE_NAME', NEW.id);
END //
DELIMITER ;

Create BEFORE UPDATE Trigger

DELIMITER //
CREATE TRIGGER trigger_name
BEFORE UPDATE ON $TABLE_NAME
FOR EACH ROW
BEGIN
    -- trigger logic
    SET NEW.updated_at = NOW();
END //
DELIMITER ;

Create AFTER UPDATE Trigger

DELIMITER //
CREATE TRIGGER trigger_name
AFTER UPDATE ON $TABLE_NAME
FOR EACH ROW
BEGIN
    -- trigger logic
    INSERT INTO audit_table (action, old_value, new_value) 
    VALUES ('UPDATE', OLD.column_name, NEW.column_name);
END //
DELIMITER ;

Create BEFORE DELETE Trigger

DELIMITER //
CREATE TRIGGER trigger_name
BEFORE DELETE ON $TABLE_NAME
FOR EACH ROW
BEGIN
    -- trigger logic
    INSERT INTO deleted_records (id, deleted_at) 
    VALUES (OLD.id, NOW());
END //
DELIMITER ;

Show Triggers

SHOW TRIGGERS;

Drop Trigger

DROP TRIGGER trigger_name;

Transactions

Start Transaction

START TRANSACTION;

Begin Transaction

BEGIN;

Commit Transaction

COMMIT;

Rollback Transaction

ROLLBACK;

Savepoint

SAVEPOINT savepoint_name;

Rollback to Savepoint

ROLLBACK TO savepoint_name;

Release Savepoint

RELEASE SAVEPOINT savepoint_name;

Auto Commit Off

SET autocommit = 0;

Auto Commit On

SET autocommit = 1;

Transaction Example

START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

User Management and Security

Create User

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

Create User with Host

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

Grant Privileges

GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'hostname';

Grant Specific Privileges

GRANT SELECT, INSERT, UPDATE ON database_name.$TABLE_NAME TO 'username'@'hostname';

Grant with Grant Option

GRANT SELECT ON database_name.* TO 'username'@'hostname' WITH GRANT OPTION;

Revoke Privileges

REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'hostname';

Revoke Specific Privileges

REVOKE SELECT, INSERT ON database_name.$TABLE_NAME FROM 'username'@'hostname';

Show Users

SELECT user, host FROM mysql.user;

Show Grants

SHOW GRANTS FOR 'username'@'hostname';

Show Current User

SELECT USER();

Change Password

ALTER USER 'username'@'hostname' IDENTIFIED BY 'new_password';

Drop User

DROP USER 'username'@'hostname';

Flush Privileges

FLUSH PRIVILEGES;

Create Role

CREATE ROLE 'role_name';

Grant Role

GRANT 'role_name' TO 'username'@'hostname';

Set Default Role

SET DEFAULT ROLE 'role_name' TO 'username'@'hostname';

Backup & Restore

Backup Database

mysqldump -u username -p database_name > backup.sql

Backup All Databases

mysqldump -u username -p --all-databases > all_backup.sql

Backup Specific Tables

mysqldump -u username -p database_name table1 table2 > tables_backup.sql

Backup with Structure Only

mysqldump -u username -p --no-data database_name > structure_only.sql

Backup with Data Only

mysqldump -u username -p --no-create-info database_name > data_only.sql

Restore Database

mysql -u username -p database_name < backup.sql

Restore from MySQL Console

SOURCE /path/to/backup.sql;

Create Database Before Restore

CREATE DATABASE database_name;
USE database_name;
SOURCE /path/to/backup.sql;

Backup with Compression

mysqldump -u username -p database_name | gzip > backup.sql.gz

Restore from Compressed Backup

gunzip < backup.sql.gz | mysql -u username -p database_name

Performance Tuning

Show Current Processes

SHOW PROCESSLIST;

Show Full Processlist

SHOW FULL PROCESSLIST;

Kill Process

KILL process_id;

Explain Query

EXPLAIN SELECT * FROM $TABLE_NAME WHERE condition;

Analyze Query Performance

EXPLAIN FORMAT=JSON SELECT * FROM $TABLE_NAME WHERE condition;

Show Table Status

SHOW TABLE STATUS FROM database_name;

Show Index Usage

SHOW INDEX FROM $TABLE_NAME;

Create Index

CREATE INDEX index_name ON $TABLE_NAME(column_name);

Create Composite Index

CREATE INDEX index_name ON $TABLE_NAME(column1, column2);

Create Unique Index

CREATE UNIQUE INDEX index_name ON $TABLE_NAME(column_name);

Drop Index

DROP INDEX index_name ON $TABLE_NAME;

Show Variables

SHOW VARIABLES LIKE 'variable_name';

Show Status

SHOW STATUS LIKE 'status_name';

Show Engine Status

SHOW ENGINE INNODB STATUS;

Optimize Table

OPTIMIZE TABLE $TABLE_NAME;

Analyze Table

ANALYZE TABLE $TABLE_NAME;

Check Table

CHECK TABLE $TABLE_NAME;

Repair Table

REPAIR TABLE $TABLE_NAME;

Show Query Cache Status

SHOW STATUS LIKE 'Qcache%';

Enable Query Cache

SET GLOBAL query_cache_type = ON;
SET GLOBAL query_cache_size = 1048576;

Show Slow Query Log

SHOW VARIABLES LIKE 'slow_query_log';

Enable Slow Query Log

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

Show Binary Log

SHOW BINARY LOGS;

Show Master Status

SHOW MASTER STATUS;

Show Slave Status

SHOW SLAVE STATUS;

Last updated