Query below lists all columns in database with their details like uniqueness, is foreign key etc.
Query
select col.table_schema as database_name,
col.table_name,
col.column_name,
col.data_type,
case when col.data_type in ('datetime', 'timestamp', 'time')
then col.datetime_precision
else col.numeric_precision end as 'precision',
col.numeric_scale,
col.character_maximum_length as char_length,
col.column_default,
col.generation_expression,
case when (group_concat(constraint_type separator ', '))
like '%PRIMARY KEY%'
then 'YES' else 'NO' end as PK,
case when (group_concat(constraint_type separator ', '))
like '%UNIQUE%'
then 'YES' else 'NO' end as UQ,
case when (group_concat(constraint_type separator ', '))
like '%FOREIGN KEY%'
then 'YES' else 'NO' end as FK,
col.is_nullable
from information_schema.columns col
join information_schema.tables tab
on col.table_schema = tab.table_schema
and col.table_name = tab.table_name
and tab.table_type = 'BASE TABLE'
left join information_schema.key_column_usage kcu
on col.table_schema = kcu.table_schema
and col.table_name = kcu.table_name
and col.column_name = kcu.column_name
left join information_schema.table_constraints tco
on kcu.constraint_schema = tco.constraint_schema
and kcu.constraint_name = tco.constraint_name
and kcu.table_name = tco.table_name
where col.table_schema not in('information_schema', 'sys',
'performance_schema', 'mysql')
group by 1,2,3,4,5,6,7,8,9,13
order by col.table_schema,
col.table_name,
col.column_name;
Columns
- database_name - database (schema) name
- table_name - table name
- column_name - column name
- data_type - type of data column contains
- precision - precision of numeric types or number of fractional digits for datetime types
- numeric_scale - scale for numeric data types
- char_length - maximum character length
- column_default - column's default value
- PK - indicate if column is primary key
- FK - indicate if column is foreign key
- UQ - indicate if column must have unique value in table
- is_nullable - indicate if column is nullable
Rows
- One row represents one column
- Scope of rows: represent all columns in database
- Ordered by table schema, table name, columnname