Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:id号自动递增的不一致性_Mysql_Database_Database Design_Auto Increment_Create Table - Fatal编程技术网

MySQL:id号自动递增的不一致性

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

我想知道您是否遇到过这样的情况,即当您单击phpMyAdmin上的浏览按钮时,自动递增的id号排列顺序不正确-是我吗?我在db表中设置了错误的内容

例如,当您向表中插入一系列数据,并且删除了其中的一些数据时,因此当您在phpMyAdmin上检查此表时,这些数据应按如下顺序显示:

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排序