为啥 INNODB_SYS_TABLES.N_COLS 为每个表显示 3+ 列?
Posted
技术标签:
【中文标题】为啥 INNODB_SYS_TABLES.N_COLS 为每个表显示 3+ 列?【英文标题】:Why does INNODB_SYS_TABLES.N_COLS show 3+columns for every table?为什么 INNODB_SYS_TABLES.N_COLS 为每个表显示 3+ 列? 【发布时间】:2012-07-06 13:38:42 【问题描述】:我刚刚安装了 mysql 5.6 开发版本,以检查 performance_schema 和 information_schema 的一些改进。而且,我发现了这个——
在 sakila.actor 表中有 4 列。从 information_schema.INNODB_SYS_TABLES 列中检查 - N_COLS 显示演员为 7 而不是 4。我可以看到对于每个表 N_COLS 显示 3+ 列。
sakila.actor-
CREATE TABLE `actor` (
`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(256) NOT NULL,
`last_name` varchar(45) NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`actor_id`),
KEY `last_name` (`last_name`,`actor_id`)
) ENGINE=InnoDB
从information_schema
.INNODB_SYS_TABLES
中选择*;
TABLE_ID NAME FLAG N_COLS SPACE
-------- ------------------------ ------ ------ --------
11 SYS_FOREIGN 0 7 0
12 SYS_FOREIGN_COLS 0 7 0
38 sakila/actor 1 7 0
39 sakila/actor_info 1 7 0
从docs 开始,它显示 N_COLS= 表中的列数。
那么为什么每个表都显示 3+ 列?有什么想法吗?
【问题讨论】:
【参考方案1】:我在网上找到的,这是因为 InnoDB 添加了三个隐藏列(DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR)
可以看源码here
【讨论】:
太棒了! MySQL 文档应该明确记录这一点。无论如何,谢谢:-)以上是关于为啥 INNODB_SYS_TABLES.N_COLS 为每个表显示 3+ 列?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?