我使用MySQL数据库来存储学生项目(每个项目都有自己的唯一ID,如第一个截图所示)。
' ID'列设置为 auto_increment 和 PRIMARY KEY 。
所有项目必须按其ID升序排序(仅限)。但每次我将一个新项目插入我的数据库并在“年”中设置较低的值。字段(比我上次输入的值更低,当我插入我以前的项目时),我的项目将在此年份自动排序'年份字段(如第二个屏幕截图所示)。
有没有办法,如何设置我的表格,只能通过' 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'])
更改排序,但是可以自动完成吗?
向所有帮助过的人致谢。
答案 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服务器返回的顺序显示行。