mysql - 为什么 INNODB_SYS_TABLES.N_COLS 显示每个表有 3 个以上的列?

标签 mysql innodb

我刚刚安装了 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 个以上的列呢?有什么想法吗?

最佳答案

我在网上找到了这个,这是因为InnoDB添加了三个隐藏列(DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR)

你可以看看源码here

关于mysql - 为什么 INNODB_SYS_TABLES.N_COLS 显示每个表有 3 个以上的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363305/

相关文章:

php - PHP 表中的货币格式从数据库获取价格

php - SQL 命令在页面执行时失败

mysql - 如何将数据添加到从另一个表获取的一组列中?

mysql - XtraDB 或 InnoDb。读写并发高的网站选哪个

mysql - 在 MySQL 中使用 InnoDB 时,显式定义*每个*外键是否很常见?

来自上一个插入的 MYSQL 插入 ID

php - 从表连接获取我的信息以在 PHP 中显示时出现问题

python - 使用 python dict 更新 MySQL 中的表

mysql - 大型 mysql (innodb) 数据库 - 查询性能慢、表消失和恢复备份时间长

mysql - Maria-db并发插入数据丢失问题