0% found this document useful (0 votes)
211 views

(MYSQL Advanced) (CheatSheet)

Uploaded by

Álvaro MT
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
211 views

(MYSQL Advanced) (CheatSheet)

Uploaded by

Álvaro MT
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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