mysql插入顺序

5gfr0r5j  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(814)

这个问题在这里已经有答案了

按插入的确切顺序返回行(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 |
+----+---------+

我想把行连接到表中,也就是说,表中的行应该按插入的顺序排列。有人能建议我查询一下吗?谢谢你提前给我答复。

mwyxok5s

mwyxok5s1#

mysql表中的记录通常没有内部顺序。唯一存在的顺序是您在查询时强加的顺序。通常使用 ORDER BY 条款。但这里有一个更大的设计问题。如果要按插入记录的时间对记录进行排序,则应该向表中添加一个包含时间戳的专用列,或者使 id 列自动增量。
如果您想使用后一种方法,请看下面的方法:

ALTER TABLE demo_table MODIFY COLUMN id INT auto_increment;

然后,像这样插入:

INSERT INTO demo_table (name) VALUES ('Michael');

数据库将选择 id 迈克尔记录的价值,一般来说,它将大于任何现有的 id 价值观。如果需要绝对控制,那么添加timestamp列可能更有意义。

jv2fixgn

jv2fixgn2#

不清楚为什么要控制数据存储在表中的“顺序”。关系模型不支持这一点;除非您指定 order by 子句中,返回记录的顺序是不确定的。。即使看起来数据是按特定的顺序存储的,底层数据库引擎也可以在任何时间点改变主意,而不会违反标准或记录行为。
执行命令时遵守特定顺序的事实 select 无条件查询 order by 是副作用。副作用通常是无害的,直到平均特征改变,副作用的行为也改变。
更重要的是,依靠主键来获得“意义”通常是个坏主意。我想你的 id 列表示主键;您真的不应该依赖主键中的任何业务含义—这就是大多数人使用代理键的原因。根据指示记录创建顺序的键,这可能是无害的,但在我看来,这仍然是一个副作用。在这方面,我不支持@timbiegeleisen的其他优秀答案。
如果您关心记录的输入顺序,请通过添加timestamp列在模式中显式显示,然后编写select语句以按该时间戳排序。这对底层逻辑/数据库引擎中的错误或更改最不敏感。

w8rqjzmb

w8rqjzmb3#

只需添加另一列 Created (Timestamp) 在表中存储插入时间
然后使用此命令插入

insert into demo_table id, name,created values(4,"Michael",NOW())

函数的作用是:返回当前的日期和时间。
因为您正在记录时间戳,所以它也可以用于将来的参考

相关问题