MySQL:id号自动递增的不一致性
我想知道您是否遇到过这样的情况,即当您单击phpMyAdmin上的浏览按钮时,自动递增的id号排列顺序不正确-是我吗?我在db表中设置了错误的内容 例如,当您向表中插入一系列数据,并且删除了其中的一些数据时,因此当您在phpMyAdmin上检查此表时,这些数据应按如下顺序显示:MySQL:id号自动递增的不一致性,mysql,database,database-design,auto-increment,create-table,Mysql,Database,Database Design,Auto Increment,Create Table,我想知道您是否遇到过这样的情况,即当您单击phpMyAdmin上的浏览按钮时,自动递增的id号排列顺序不正确-是我吗?我在db表中设置了错误的内容 例如,当您向表中插入一系列数据,并且删除了其中的一些数据时,因此当您在phpMyAdmin上检查此表时,这些数据应按如下顺序显示: id 2 24 28 296 300 id 24 300 2 296 28 但在我的大多数表格中,它们并不是按顺序出现的,而是像这样出现的 id 2 24 28 296 300 id 24
id
2
24
28
296
300
id
24
300
2
296
28
但在我的大多数表格中,它们并不是按顺序出现的,而是像这样出现的
id
2
24
28
296
300
id
24
300
2
296
28
如下图所示
我们能做点什么让ID以正确的顺序出现吗
编辑1:
我想你们大多数人都误解了我在这里讨论的问题。我的意思是当您单击phpMyAdmin上的Browser按钮以列出表中的所有数据时,而不是当您使用SQL查询通过使用order by
列出输出时
这有意义吗
编辑2:
这是我的一个表格结构-它是否有助于您了解其中的错误
CREATE TABLE IF NOT EXISTS `root_pages` (
`pg_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pg_url` varchar(255) DEFAULT NULL,
`pg_title` varchar(255) DEFAULT NULL,
`pg_subtitle` varchar(255) DEFAULT NULL,
`pg_description` text,
`pg_introduction` text,
`pg_content_1` text,
`pg_content_2` text,
`pg_content_3` text,
`pg_content_4` text,
`pg_order` varchar(255) DEFAULT NULL,
`pg_hide` varchar(255) DEFAULT '0',
`pg_highlight` varchar(255) DEFAULT '0',
`pg_important` varchar(255) DEFAULT '0',
`pg_parent` varchar(255) DEFAULT '0',
`parent_id` varchar(255) DEFAULT NULL,
`pg_cat_id` varchar(255) DEFAULT NULL COMMENT 'page category id',
`ps_cat_id` varchar(255) DEFAULT NULL COMMENT 'post category id',
`tmp_id` varchar(255) DEFAULT NULL COMMENT 'template id',
`pg_backdate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`pg_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`pg_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`pg_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
您可以按自己喜欢的方式对输出进行排序:
按id ASC排序
表中的记录没有固有的顺序。如果要按ID排序,则在选择时必须使用
order by
子句
使用SQL时,select
返回的集合是无序的,除非指定它们的顺序
您应该假设实际顺序是随机的,除非您指定它。实际上,它是任意的,而不是随机的,但是对表内容的更改可以很容易地改变顺序。不确定这是否适用于您,但您的PK类型是INT吗?如果它是某种VARCHAR或文本,它可以按照您展示的示例进行排序。你确定那个栏是你的主键吗?发布该表的ShowCreateTable输出,它可能会变得更清晰
以及您使用的存储引擎。如果我没记错的话,select的默认顺序是MYISAM的insert order和InnoDB的PK。这也取决于您的MySql版本。为了确保在所有情况下,您都应该在select语句中使用ORDER BY。asc在技术上不是必需的,但是+1表示没有默认顺序。@Omar:
asc
明确易读,如果您确实想要升序,则没有理由忽略它。感谢您的回复。我刚刚在上面贴了一张我的表格结构。谢谢PK是主键。我从您的创建声明中看到,您正在使用MYISAM作为存储引擎。该引擎的默认选择顺序是插入记录的顺序。这就是为什么你会得到你现在得到的结果。确保按主键排序select的唯一方法是在select查询中使用order by。因为您只对phpmyadmin的默认行为感兴趣,所以只能通过修改phpmyadmin的代码来实现这些。您可以尝试将存储引擎更改为InnoDB,默认情况下在select中使用PK排序