有否默认顺序,不能强调不够,因为每个人都没有错点。
数据库中的表不是普通的html表,它是无序的元组集。常常让只习惯MysqL的程序员感到惊讶,因为在该特定数据库中,行的顺序通常是可预测的,因为它没有利用某些先进的优化技术。例如,在以下任何查询中都无法知道将返回哪些行或它们的顺序:
select * from table limit 10
select * from table limit 10 offset 10
select * from table order by x limit 10
在上一个查询中,只有在x列中的所有值都是唯一的情况下,顺序才是可预测的。只要满足select语句的条件,RDBMS可以随意按任意顺序返回任何行。
尽管你可以在Django级别添加默认排序,但这会导致它向每个非排序查询添加order by子句:
class Table(models.Model):
...
class Meta:
ordering = ['name']
请注意,如果由于某些原因你不需要有序的行,则可能会降低性能。