SELECT CONCAT(
"ALTER TABLE ",
kcu.table_name,
" ADD CONSTRAINT ",
kcu.constraint_name,
" FOREIGN KEY (",
kcu.column_name,
") REFERENCES ",
kcu.referenced_table_name,
"(",
kcu.referenced_column_name,
") ON DELETE ",
rc.delete_rule,
" ON UPDATE ",
rc.update_rule,
";" ) ASstatementFROM information_schema.key_column_usage kcu
JOIN information_schema.tables AS t
ON t.table_schema = kcu.table_schema
AND t.table_name= kcu.table_nameJOIN information_schema.referential_constraints rc
ON kcu.constraint_name= rc.constraint_nameWHERE kcu.table_schema =DATABASE()
AND kcu.referenced_table_name ISNOTNULLORDERBY kcu.table_name, kcu.column_name;
List all primary and foreign keys
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT tab.table_schema AS database_schema,
sta.index_name AS pk_name,
sta.seq_in_index AS column_id,
sta.column_name,
tab.table_nameFROM information_schema.tables AS tab
LEFTOUTERJOIN information_schema.statisticsAS sta
ON sta.table_schema = tab.table_schema
AND sta.table_name= tab.table_nameAND sta.index_name ='primary'WHERE tab.table_schema ='<table>'AND tab.table_type ='BASE TABLE'ORDERBY tab.table_name, column_id;
List all virtual columns
1
2
3
4
5
6
7
8
SELECT table_schema,
table_name,
data_type,
extra,
generation_expression
FROM information_schema.columns
WHERE extra LIKE'%stored%'OR extra LIKE'%virtual%';
SELECT t.table_schema, t.table_name, t.engine, t.table_collation, c.column_name, c.data_type, c.character_set_name, c.collation_nameFROM information_schema.columns cJOIN information_schema.tables t
WHERE t.table_schema NOTIN ('information_schema', 'mysql', 'performance_schema', 'sys')
AND t.table_name=c.table_nameAND t.table_schema =c.table_schema
AND (c.character_set_name!='utf8mb4'ORc.collation_nameNOTLIKE'utf8mb4%'OR t.table_collation NOTLIKE'utf8mb4%')
ORDERBYc.table_name, c.column_name;
Performance Schema
Activar el instrumento:
1
2
3
UPDATE performance_schema.setup_instruments
SET enabled='YES', timed='YES'WHERE name LIKE'stage/%';
Activar los eventos, útil para obtener información de los ALTER’s:
1
2
3
UPDATE performance_schema.setup_consumers
SET enabled='YES'WHERE name IN ('events_stages_current','events_stages_history','events_stages_history_long');
List all tables with DML operations
1
2
3
4
5
6
7
8
9
10
SELECT object_schema,
object_name,
count_read,
count_insert,
count_update,
count_delete
FROM performance_schema.table_io_waits_summary_by_table
WHERE object_schema NOTIN ('mysql',
'information_schema',
'performance_schema');
Conocer el progreso de un ALTER
1
2
3
4
5
6
7
8
9
10
11
SELECT t.processlist_info,
c.work_completed,
c.work_estimated,
ROUND(c.work_completed /NULLIF(c.work_estimated,0) *100, 2) AS pct_done,
ROUND(c.timer_wait /1000000000000, 2) AS seconds_elapsed,
ROUND((c.timer_wait /1000000000000) / (c.work_completed /NULLIF(c.work_estimated,1))
* (1- (c.work_completed /NULLIF(c.work_estimated,1))), 2) AS seconds_eta
FROM performance_schema.events_stages_current cJOIN performance_schema.threads t ON t.thread_id =c.thread_id;