这个问题在这里已经有答案了:
按插入的确切顺序返回行(4个答案)
两年前关门了。
我不知道是否已经回答了。在mysql表中,行将按主键的顺序排列。例如
+----+--------+
| id | name |
+----+--------+
| 1 | john |
| 2 | Bryan |
| 3 | Princy |
| 5 | Danny |
+----+--------+
如果我插入行 insert into demo_table values(4,"Michael")
table会像
+----+---------+
| id | name |
+----+---------+
| 1 | john |
| 2 | Bryan |
| 3 | Princy |
| 4 | Michael |
| 5 | Danny |
+----+---------+
但我需要这张table
+----+---------+
| id | name |
+----+---------+
| 1 | john |
| 2 | Bryan |
| 3 | Prince |
| 5 | Danny |
| 4 | Michael |
+----+---------+
我想把行连接到表中,也就是说,表中的行应该按插入的顺序排列。有人能建议我查询一下吗?谢谢你提前给我答复。
3条答案
按热度按时间mwyxok5s1#
mysql表中的记录通常没有内部顺序。唯一存在的顺序是您在查询时强加的顺序。通常使用
ORDER BY
条款。但这里有一个更大的设计问题。如果要按插入记录的时间对记录进行排序,则应该向表中添加一个包含时间戳的专用列,或者使id
列自动增量。如果您想使用后一种方法,请看下面的方法:
然后,像这样插入:
数据库将选择
id
迈克尔记录的价值,一般来说,它将大于任何现有的id
价值观。如果需要绝对控制,那么添加timestamp列可能更有意义。jv2fixgn2#
不清楚为什么要控制数据存储在表中的“顺序”。关系模型不支持这一点;除非您指定
order by
子句中,返回记录的顺序是不确定的。。即使看起来数据是按特定的顺序存储的,底层数据库引擎也可以在任何时间点改变主意,而不会违反标准或记录行为。执行命令时遵守特定顺序的事实
select
无条件查询order by
是副作用。副作用通常是无害的,直到平均特征改变,副作用的行为也改变。更重要的是,依靠主键来获得“意义”通常是个坏主意。我想你的
id
列表示主键;您真的不应该依赖主键中的任何业务含义—这就是大多数人使用代理键的原因。根据指示记录创建顺序的键,这可能是无害的,但在我看来,这仍然是一个副作用。在这方面,我不支持@timbiegeleisen的其他优秀答案。如果您关心记录的输入顺序,请通过添加timestamp列在模式中显式显示,然后编写select语句以按该时间戳排序。这对底层逻辑/数据库引擎中的错误或更改最不敏感。
w8rqjzmb3#
只需添加另一列
Created (Timestamp)
在表中存储插入时间然后使用此命令插入
函数的作用是:返回当前的日期和时间。
因为您正在记录时间戳,所以它也可以用于将来的参考