(MYSQL Advanced) (CheatSheet)

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

# [ MYSQL Advanced ] ( CheatSheet )

1. Advanced Database Operations

● Clone a database: CREATE DATABASE new_db AS (SELECT * FROM old_db);


● Drop all tables in a database: SET @tables = NULL; SELECT
GROUP_CONCAT(table_name) INTO @tables FROM information_schema.tables
WHERE table_schema = 'dbname'; SET @tables = CONCAT('DROP TABLE ',
@tables); PREPARE stmt FROM @tables; EXECUTE stmt;
● Rename a database: CREATE DATABASE new_db; RENAME TABLE old_db.table TO
new_db.table; DROP DATABASE old_db;

2. Advanced Table Operations

● Partition a table: ALTER TABLE tablename PARTITION BY RANGE


(year(column)) (PARTITION p0 VALUES LESS THAN (1991), PARTITION p1 VALUES
LESS THAN (2001), PARTITION p2 VALUES LESS THAN MAXVALUE);
● Convert a table to use dynamic columns: ALTER TABLE tablename
ROW_FORMAT=DYNAMIC;
● Move a table to another schema: ALTER TABLE old_schema.table RENAME
new_schema.table;
● Change a column collation: ALTER TABLE tablename MODIFY column_name
VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
● Copy a table structure only: CREATE TABLE new_table LIKE old_table;

3. Advanced Data Manipulation

● Insert multiple rows: INSERT INTO tablename (column1, column2) VALUES


(value1, value2), (value3, value4), (value5, value6);
● Insert if not exists: INSERT IGNORE INTO tablename (column1, column2)
VALUES (value1, value2);
● Insert or update: INSERT INTO tablename (column1, column2) VALUES
(value1, value2) ON DUPLICATE KEY UPDATE column1 = VALUES(column1),
column2 = VALUES(column2);
● Batch update: UPDATE tablename SET column = CASE WHEN condition1 THEN
value1 WHEN condition2 THEN value2 ELSE column END WHERE id IN (id1, id2,
id3);
● Delete all rows and reset identity: TRUNCATE TABLE tablename;

4. Advanced Subqueries and CTEs

By: Waleed Mousa


● CTE for recursive queries: WITH RECURSIVE cte_name (column1, column2) AS
(SELECT column1, column2 FROM table WHERE condition UNION ALL SELECT
column1, column2 FROM table JOIN cte_name ON table.column =
cte_name.column) SELECT * FROM cte_name;
● Use of subquery in JOIN: SELECT * FROM table1 JOIN (SELECT column FROM
table2 WHERE condition) AS subquery ON table1.column = subquery.column;
● Correlated subquery: SELECT * FROM table1 WHERE column1 = (SELECT
MAX(column2) FROM table2 WHERE table2.foreign_key = table1.key);

5. Advanced User and Permissions Management

● Create a user with specific privileges: CREATE USER 'username'@'host'


IDENTIFIED BY 'password'; GRANT SELECT, INSERT ON dbname.* TO
'username'@'host';
● Clone a user with privileges: CREATE USER 'newuser'@'host' IDENTIFIED BY
'password'; GRANT ALL PRIVILEGES ON dbname.* TO 'newuser'@'host'
IDENTIFIED BY 'password' WITH GRANT OPTION;
● Show users with specific privileges: SELECT user, host FROM mysql.user
WHERE user LIKE '%';

6. Advanced Backup and Recovery

● Incremental backup: mysqldump --single-transaction --flush-logs


--master-data=2 --all-databases > backupfile.sql;
● Restore specific table from backup: mysql -u username -p dbname <
backupfile.sql --one-database dbname --tables tablename;
● Hot backup with Percona XtraBackup: xtrabackup --backup
--target-dir=/data/backups/

7. Advanced Performance and Maintenance

● Partition pruning: ALTER TABLE tablename DROP PARTITION partition_name;


● Query profiling: SET profiling = 1; SELECT * FROM tablename; SHOW
PROFILES;
● Defragment table: OPTIMIZE TABLE tablename;

8. Advanced String and Text Functions

● Extract part of string: SELECT SUBSTRING_INDEX(column, 'delimiter', part)


FROM tablename;

By: Waleed Mousa


● Find and replace using REGEXP: SELECT REGEXP_REPLACE(column, 'pattern',
'replacement') FROM tablename;
● Pattern matching: SELECT * FROM tablename WHERE column REGEXP 'pattern';

9. Advanced Numeric and Date Functions

● Calculate age from date: SELECT TIMESTAMPDIFF(YEAR, birthdate, CURDATE())


AS age FROM tablename;
● Generate a sequence of numbers: SELECT @row := @row + 1 AS row, column
FROM tablename, (SELECT @row := 0) AS r;
● Format number with commas: SELECT FORMAT(column, 0) FROM tablename;

10. Advanced Conditional Expressions

● Nested IF statements: SELECT IF(condition1, result1, IF(condition2,


result2, default_result)) FROM tablename;
● Conditional aggregation: SELECT SUM(IF(condition, column, 0)) FROM
tablename;
● CASE in ORDER BY: SELECT * FROM tablename ORDER BY CASE WHEN condition1
THEN column1 WHEN condition2 THEN column2 ELSE column3 END;

11. Advanced Join Techniques

● Join with USING clause: SELECT * FROM table1 JOIN table2 USING
(common_column);
● Anti Join (not in): SELECT * FROM table1 LEFT JOIN table2 ON
table1.column = table2.column WHERE table2.column IS NULL;
● Semi Join (exists): SELECT * FROM table1 WHERE EXISTS (SELECT 1 FROM
table2 WHERE table1.column = table2.column);

12. Advanced Set Operations

● Intersect using INNER JOIN: SELECT table1.column FROM table1 INNER JOIN
table2 ON table1.column = table2.column;
● Except using LEFT JOIN: SELECT table1.column FROM table1 LEFT JOIN table2
ON table1.column = table2.column WHERE table2.column IS NULL;

13. Advanced Security

● Generate UUID: SELECT UUID();

By: Waleed Mousa


● Encrypt a column: UPDATE tablename SET column = AES_ENCRYPT(column,
'key');
● Decrypt a column: SELECT AES_DECRYPT(column, 'key') FROM tablename;

14. Advanced Transaction Control

● Savepoint and rollback to savepoint: SAVEPOINT savepoint_name; ROLLBACK


TO SAVEPOINT savepoint_name;
● Set autocommit mode: SET autocommit = 0;
● Show transaction isolation level: SHOW VARIABLES LIKE
'transaction_isolation';

15. Advanced Administration

● Change user password: ALTER USER 'username'@'host' IDENTIFIED BY


'newpassword';
● Check MySQL server uptime: SHOW GLOBAL STATUS LIKE 'Uptime';
● Monitor slow queries: SET GLOBAL slow_query_log = 'ON';

16. Advanced Debugging and Profiling

● Log all queries for debugging: SET GLOBAL general_log = 'ON';


● Show current locks: SHOW ENGINE INNODB STATUS;
● Analyze query cost: SHOW STATUS LIKE 'Last_query_cost';

17. Advanced Index and Performance Optimization

● Add composite index: CREATE INDEX idx_name ON tablename (column1,


column2);
● Drop all indexes in a table: ALTER TABLE tablename DROP INDEX index_name;
● Check index usage: SHOW INDEX FROM tablename;

18. Advanced Numeric and Date Functions

● Add minutes to a time: SELECT DATE_ADD(time_column, INTERVAL 15 MINUTE)


FROM tablename;
● Round to nearest integer: SELECT ROUND(column) FROM tablename;
● Find the difference in months: SELECT TIMESTAMPDIFF(MONTH, date1, date2)
FROM tablename;

By: Waleed Mousa


19. Advanced Aggregate Functions Beyond Basics

● Median of a column: SELECT column FROM tablename ORDER BY column LIMIT 1


OFFSET (SELECT COUNT(*) FROM tablename) / 2;
● Percentile calculation: SELECT column FROM tablename ORDER BY column
LIMIT 1 OFFSET (SELECT COUNT(*) * 0.9) - 1;
● Mode of a column: SELECT column, COUNT(*) AS freq FROM tablename GROUP BY
column ORDER BY freq DESC LIMIT 1;

20. Advanced Database Maintenance and Inspection

● Check for corrupted tables: CHECK TABLE tablename EXTENDED;


● Repair corrupted table: REPAIR TABLE tablename;
● Inspect table space usage: SHOW TABLE STATUS LIKE 'tablename';

21. Advanced Information Schema Usage

● Get column statistics: SELECT * FROM information


Schema.COLUMN_STATISTICS WHERE TABLE_NAME = 'tablename';
● List foreign keys in a schema: SELECT * FROM
information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA =
'dbname';
● Get table size: SELECT table_name AS 'Table', ROUND((data_length +
index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM
information_schema.TABLES WHERE table_schema = 'dbname';

22. Advanced Performance Schema for Diagnostics

● Track wait events: SELECT * FROM


performance_schema.events_waits_summary_global_by_event_name;
● Check IO statistics: SELECT * FROM
performance_schema.file_summary_by_event_name;
● Monitor query execution time: SELECT * FROM
performance_schema.events_statements_summary_by_digest WHERE SCHEMA_NAME
= 'dbname' ORDER BY SUM_TIMER_WAIT DESC;

23. Advanced Query Optimization Techniques

● Use index hints: SELECT * FROM tablename USE INDEX (index_name) WHERE
column = 'value';

By: Waleed Mousa


● Force index usage: SELECT * FROM tablename FORCE INDEX (index_name) WHERE
column = 'value';
● Optimize query plan: SELECT SQL_NO_CACHE * FROM tablename WHERE column =
'value';

24. Advanced Data Export and Import

● Export data to CSV: SELECT * INTO OUTFILE '/path/to/file.csv' FIELDS


TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM
tablename;
● Import data from CSV: LOAD DATA INFILE '/path/to/file.csv' INTO TABLE
tablename FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY
'\n';
● Export specific columns: SELECT column1, column2 INTO OUTFILE
'/path/to/file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES
TERMINATED BY '\n' FROM tablename;

25. Advanced JSON Functions

● Extract JSON value: SELECT JSON_EXTRACT(json_column, '$.key') FROM


tablename;
● Update JSON value: UPDATE tablename SET json_column =
JSON_SET(json_column, '$.key', 'new_value') WHERE condition;
● Merge JSON values: SELECT JSON_MERGE(json_column1, json_column2) FROM
tablename;

26. Advanced Spatial Data Operations

● Create spatial index: CREATE SPATIAL INDEX idx_name ON tablename


(spatial_column);
● Select within radius: SELECT * FROM tablename WHERE
ST_Distance_Sphere(point_column, POINT(lng, lat)) <= radius;
● Find nearest point: SELECT * FROM tablename ORDER BY
ST_Distance_Sphere(point_column, POINT(lng, lat)) LIMIT 1;

27. Advanced Full-Text Search

● Full-text search with relevance: SELECT *, MATCH (column) AGAINST


('search_term') AS relevance FROM tablename WHERE MATCH (column) AGAINST
('search_term');

By: Waleed Mousa


● Boolean mode search: SELECT * FROM tablename WHERE MATCH (column) AGAINST
('+term1 -term2' IN BOOLEAN MODE);
● Natural language search: SELECT * FROM tablename WHERE MATCH (column)
AGAINST ('search_term' IN NATURAL LANGUAGE MODE);

28. Advanced View Management

● Create a view with joins: CREATE VIEW viewname AS SELECT a.column1,


b.column2 FROM table1 a JOIN table2 b ON a.common_column =
b.common_column;
● Update a view: CREATE OR REPLACE VIEW viewname AS SELECT column1, column2
FROM tablename;
● Drop a view: DROP VIEW viewname;

29. Advanced Stored Procedures and Functions

● Create a stored procedure: CREATE PROCEDURE proc_name (IN param1 INT, OUT
param2 VARCHAR(100)) BEGIN SELECT column INTO param2 FROM tablename WHERE
id = param1; END;
● Call a stored procedure: CALL proc_name(1, @output); SELECT @output;
● Create a stored function: CREATE FUNCTION func_name (param1 INT) RETURNS
VARCHAR(100) BEGIN RETURN (SELECT column FROM tablename WHERE id =
param1); END;

30. Advanced Triggers

● Create a trigger for update: CREATE TRIGGER trigger_name BEFORE UPDATE ON


tablename FOR EACH ROW BEGIN SET NEW.column = OLD.column + 1; END;
● Create a trigger for insert: CREATE TRIGGER trigger_name BEFORE INSERT ON
tablename FOR EACH ROW BEGIN SET NEW.column = 'default_value'; END;
● Drop a trigger: DROP TRIGGER trigger_name;

31. Advanced Replication Management

● Setup replication user: CREATE USER 'repl'@'%' IDENTIFIED WITH


mysql_native_password BY 'password'; GRANT REPLICATION SLAVE ON *.* TO
'repl'@'%';
● Show replication status: SHOW SLAVE STATUS\G;
● Start replication: START SLAVE;
● Stop replication: STOP SLAVE;

By: Waleed Mousa


32. Advanced Event Scheduler

● Create an event: CREATE EVENT event_name ON SCHEDULE EVERY 1 DAY STARTS


'2024-01-01 00:00:00' DO UPDATE tablename SET column = value WHERE
condition;
● Show events: SHOW EVENTS;
● Drop an event: DROP EVENT event_name;

33. Advanced Schema Management

● Copy schema: mysqldump -d -u username -p old_db | mysql -u username -p


new_db;
● Rename schema: RENAME TABLE old_schema.table1 TO new_schema.table1,
old_schema.table2 TO new_schema.table2;
● Export schema structure: mysqldump -d -u username -p dbname > schema.sql;

34. Advanced Audit and Logging

● Enable general query log: SET GLOBAL general_log = 'ON';


● Show slow queries: SELECT * FROM mysql.slow_log ORDER BY start_time DESC;
● Enable binary logging: SET GLOBAL log_bin = 'ON';

35. Advanced Partition Management

● Reorganize partition: ALTER TABLE tablename REORGANIZE PARTITION


partition_name INTO (PARTITION new_name VALUES LESS THAN (value));
● Merge partitions: ALTER TABLE tablename MERGE PARTITIONS partition1,
partition2 INTO new_partition;
● Drop partition: ALTER TABLE tablename DROP PARTITION partition_name;

36. Advanced Data Masking and Anonymization

● Mask sensitive data: UPDATE tablename SET column =


CONCAT(SUBSTRING(column, 1, 3), '***', SUBSTRING(column, -3)) WHERE
condition;
● Anonymize data with random values: UPDATE tablename SET column =
CONCAT(CHAR(FLOOR(65 + RAND() * 26)), CHAR(FLOOR(65 + RAND() * 26)),
CHAR(FLOOR(65 + RAND() * 26))) WHERE condition;

37. Advanced Data Migration

By: Waleed Mousa


● Migrate data between tables: INSERT INTO new_table (column1, column2)
SELECT column1, column2 FROM old_table;
● Copy data between servers: mysqldump -u username -p --host=source_host
dbname | mysql -u username -p --host=destination_host dbname;
● Transform data during migration: INSERT INTO new_table (column1, column2)
SELECT column1, UPPER(column2) FROM old_table;

38. Advanced Security Management

● Change user host: UPDATE mysql.user SET host = 'new_host' WHERE user =
'username' AND host = 'old_host'; FLUSH PRIVILEGES;
● Disable a user account: ALTER USER 'username'@'host' ACCOUNT LOCK;
● Enable a user account: ALTER USER 'username'@'host' ACCOUNT UNLOCK;

39. Advanced Performance Analysis

● Show buffer pool status: SHOW ENGINE INNODB STATUS\G;


● Analyze query cache: SHOW STATUS LIKE 'Qcache%';
● Analyze index usage: SHOW STATUS LIKE 'Handler_read%';

40. Advanced Storage Engine Management

● Convert table storage engine: ALTER TABLE tablename ENGINE = 'InnoDB';


● Check storage engine status: SHOW ENGINE INNODB STATUS;
● Enable/disable storage engine: SET GLOBAL storage_engine = 'InnoDB';

41. Advanced Geographic Data Management

● Insert spatial data: INSERT INTO tablename (spatial_column) VALUES


(ST_GeomFromText('POINT(lng lat)'));
● Query spatial data: SELECT ST_AsText(spatial_column) FROM tablename WHERE
condition;
● Spatial distance calculation: SELECT ST_Distance_Sphere(Point(lng1,
lat1), Point(lng2, lat2)) FROM tablename;

42. Advanced JSON Operations

● Merge JSON arrays: SELECT JSON_ARRAY_APPEND(column, '$', value) FROM


tablename;
● Remove JSON key: UPDATE tablename SET json_column =
JSON_REMOVE(json_column, '$.key') WHERE condition;

By: Waleed Mousa


● Extract multiple JSON values: SELECT
JSON_UNQUOTE(JSON_EXTRACT(json_column, '$.key1')),
JSON_UNQUOTE(JSON_EXTRACT(json_column, '$.key2')) FROM tablename;

By: Waleed Mousa

You might also like