因为开发需求,需要获取到Mysql的数据库,表,列的基本信息
数据库
select * from information_schema.SCHEMATA表
select *
from information_schema.TABLES as t1
left join
information_schema.INNODB_SYS_TABLES as t2 on concat(t1.TABLE_SCHEMA,’/’,t1.TABLE_NAME) = t2.NAME列
SELECT
ORDINAL_POSITION AS ‘index’,
Column_Name AS name,
COLUMN_type AS type,
COLUMN_COMMENT AS comment,
0 as isPartitionField,
table_name,
IS_NULLABLE as notnull
FROM
information_schema.COLUMNS
问题1:information_schema.TABLES没有表id,information_schema.INNODB_SYS_TABLES里面有表id,为什么不使用INNODB_SYS_TABLES中的表id?
因为访问INNODB_SYS_TABLES,需要额外的权限,详情请见官网。
问题2:information_schema.INNODB_SYS_TABLES里面的库名或者表名为啥有其他符号?
因为INNODB对关键字进行了转义,具体转义方法见官网
问题3:如何获取表大小?
表大小包含数据大小和索引大小,两者相加即为表大小。
select DATA_LENGTH/1024 + INDEX_LENGTH/1024 as totalSize from information_schema.TABLES
问题4:mysql修改列备注?
ALTER TABLE demo_users7 MODIFY COLUMN user_id int(77) COMMENT ‘我是userid222’;
这里必须要指定列类型,否则就会将列类型置位默认值。
MySQL的官网比Oracle的官网好太多了,Oracle的官网只能靠搜索才能找到,Mysql目录看看就知道有啥了……