MySQL - ID无法自动排序

时间:2016-04-11 16:14:50

标签: mysql sorting

我使用MySQL数据库来存储学生项目(每个项目都有自己的唯一ID,如第一个截图所示)。

Screenshot1

' ID'列设置为 auto_increment PRIMARY KEY

所有项目必须按其ID升序排序(仅限)。但每次我将一个新项目插入我的数据库并在“年”中设置较低的值。字段(比我上次输入的值更低,当我插入我以前的项目时),我的项目将在此年份自动排序'年份字段(如第二个屏幕截图所示)。

Screenshot2

有没有办法,如何设置我的表格,只能通过' ID'来自动订购所有新添加的项目。柱?是的,我知道我可以在放置每条新记录后用import cPickle as pickle from random import randint # for testing import os # needed if not run in -u mode #if os.name == 'nt': # put stdout into binary mode on Windows # import sys, msvcrt # msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) class OtherClass(object): def __init__(self, files): self.files = files self.download() def download(self): files = [fn for fn in self.files if fn != '.' and fn != '..'] successful = [] unsuccessful = [] for fn in files: if randint(0, 1) % 2: # simulate random download success successful.append(fn) for fn in files: if fn not in successful: unsuccessful.append(fn) results = { # package lists into single object 'successful': successful, 'unsuccessful': unsuccessful } print(pickle.dumps(results)) # send object by writing it to stdout instance = OtherClass(['.', '..', 'file1', 'file2', 'file3', 'file4']) 更改排序,但是可以自动完成吗?

向所有帮助过的人致谢。

2 个答案:

答案 0 :(得分:1)

查询结果中的顺序应由ORDER子句确定。不要依赖phpmyadmin(或其他工具)应用的默认订单。

您必须区别于插入/更新检索。

关于自动订购INTO phpmyadmin,可能在查询上使用书签:How can I set a default sort for tables in PHPMyAdmin (i.e. always "Primary key - Descending")

答案 1 :(得分:1)

问:有没有办法,如何设置我的表格,仅通过“ID”列自动订购所有新添加的项目?

答:MySQL表中没有“自动排序”。 (某些存储引擎,例如InnoDB,是“索引组织”结构,并且按群集键按顺序存储行。)但是该组织不定义或指定SELECT语句返回的行的顺序。

如果没有SELECT语句的ORDER BY子句,那么MySQL服务器可以按照它选择的任何顺序返回行。无法保证任何“自动”或“默认”排序。

当我们运行没有ORDER BY子句的SQL SELECT语句时,我们确实观察到行往往以一致的顺序返回。这种行为无法保证,也不是“自动”。

我们观察到的这种一致的“排序”行为是由于MySQL服务器在一组一致的数据上执行一致的操作集。

执行ALTER TABLE语句来重建整个表是“自动排序”问题的解决方案。

如果您希望MySQL服务器按特定顺序返回行,则解决方案是向SELECT语句添加ORDER BY子句

执行SELECT语句的客户端可以随意对其检索的行执行任何操作。客户端可以执行诸如过滤,排序等任何操作,以便在用户界面中提供返回的内容。

某些客户端(如mysql命令行)没有实现“过滤”或“排序”行的任何功能,因此客户端指定应返回行的顺序的唯一方法是ORDER BY子句声明本身。 (MySQL命令行客户端以与检索它们相同的顺序返回用户界面中的行。)

我希望phpMyAdmin做同样的事情,它按照从MySQL服务器返回的顺序显示行。