gpt4 book ai didi

Mysql 表列出的行不按顺序排列

转载 作者:行者123 更新时间:2023-11-29 12:43:36 26 4
gpt4 key购买 nike

今天我在 mysql 表中插入了一行,但发生了一些奇怪的事情,因为最后添加的具有较高主 id 的行位于具有较低 id 的其他一些行之前以及具有较低 id 的其他一些行之后,如下所示:

+---------+
| user_id |
+---------+
| 1 |
| 50 |
| 69 | <=== Wrong place
| 63 |
+---------+

这就是它在 phpmyadmin 和我的 php 脚本中的列出方式。我知道如果我没有在 php 脚本中定义列出行的顺序,但在 phpmyadmin 中我不知道为什么会发生这种情况。顺便说一句,这是我第一次看到这样的事情。

这是查询的结果:SHOW CREATE TABLE mytable

CREATE TABLE `users` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing user_id of each user,
unique index',  `web_id` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
 `user_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s name',
 `user_password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s password in salted and hashed format',
`user_email` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s email',
`domain` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
`billing_firstname` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
`billing_lastname` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
`billing_phone` varchar(90) COLLATE utf8_unicode_ci NOT NULL,
`billing_country` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`git_auto_update` enum('Y','N') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
`server_id` int(16) NOT NULL,
`trial` enum('0','1') COLLATE utf8_unicode_ci NOT NULL,
`purchase_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`user_id`),
 UNIQUE KEY `user_name` (`user_name`)
) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='user data'

最佳答案

这只是一个猜测,但事实就是这样......

您的表格布局是

CREATE TABLE `users` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing user_id of each user,
unique index',  `web_id` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
 `user_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s name',
 `user_password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s password in salted and hashed format',
`user_email` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s email',
`domain` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
`billing_firstname` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
`billing_lastname` varchar(166) COLLATE utf8_unicode_ci NOT NULL,
`billing_phone` varchar(90) COLLATE utf8_unicode_ci NOT NULL,
`billing_country` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`git_auto_update` enum('Y','N') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Y',
`server_id` int(16) NOT NULL,
`trial` enum('0','1') COLLATE utf8_unicode_ci NOT NULL,
`purchase_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`user_id`),
 UNIQUE KEY `user_name` (`user_name`)
) ENGINE=MyISAM AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='user data'

我的直觉告诉我,user_id 值是按 user_name 顺序出现的。当同时存在主键和唯一键时,有时会发生这种情况。您可以通过运行来验证这一点

SELECT user_id,user_name FROM users;
SELECT user_id,user_name FROM users ORDER BY user_id;
SELECT user_id,user_name FROM users ORDER BY user_name;

并比较输出

关于Mysql 表列出的行不按顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25771472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com