Mysql插入顺序

时间:2018-07-23 10:37:21

标签: mysql database rdbms

我不知道它是否已经回答。我没有任何答案。在Mysql表中,行将按主键顺序排列。例如

+----+--------+
| id | name   |
+----+--------+
|  1 | john   |
|  2 | Bryan  |
|  3 | Princy |
|  5 | Danny  |
+----+--------+

如果我在行insert into demo_table values(4,"Michael")处插入。表将类似于

+----+---------+
| id | name    |
+----+---------+
|  1 | john    |
|  2 | Bryan   |
|  3 | Princy  |
|  4 | Michael |
|  5 | Danny   |
+----+---------+

但是我需要桌子像

+----+---------+
| id | name    |
+----+---------+
|  1 | john    |
|  2 | Bryan   |
|  3 | Prince  |
|  5 | Danny   |
|  4 | Michael |
+----+---------+

我希望将行连接到表,即 表中的行应按插入顺序排列。有人可以建议我查询该查询吗?谢谢您的任何答复。

3 个答案:

答案 0 :(得分:3)

MySQL表中的记录通常没有内部顺序。存在的唯一顺序是您在查询时强加的顺序。您通常使用ORDER BY子句强加该顺序。但是这里存在一个更大的设计问题。如果要在插入记录时对记录进行排序,则应在表中添加一个包含时间戳的专用列,或者使id列自动递增。

如果要使用后一个选项,请按以下步骤操作:

ALTER TABLE demo_table MODIFY COLUMN id INT auto_increment;

然后,按以下步骤进行插入:

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

数据库将为Michael记录选择一个id值,并且通常它将大于任何已经存在的id值。如果需要绝对控制,那么添加时间戳列可能更有意义。

答案 1 :(得分:0)

只需在表中添加另一列Created (Timestamp)来存储插入时间

然后使用此命令进行插入

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

NOW()函数返回当前日期和时间。

由于您正在记录时间戳,所以它也可以用于将来的参考

答案 2 :(得分:0)

尚不清楚为什么要控制表中存储数据的“顺序”。关系模型不支持这一点。除非您指定order by子句the order in which records are returned is not deterministic.。即使看起来像是按特定顺序存储数据,底层数据库引擎也可以在任何时间改变主意,而不会违反标准或记录的行为。

在不使用select的情况下执行order by查询时,您会观察到特定的顺序,这是一个副作用。副作用通常是无害的,直到平均特征发生变化且副作用的行为也发生变化为止。

此外-依靠主键具有“含义”通常不是一个好主意。我假设您的id列代表一个主键;您实际上不应该依赖主键中的任何业务含义-这就是为什么大多数人使用surrogate keys的原因。取决于指示创建记录的顺序的键可能是无害的,但是对我来说似乎仍然是副作用。在这种情况下,我不支持@TimBiegeleisen的其他出色答案。

如果您关心记录的输入顺序,请通过添加一个timestamp列使其在架构中显式显示,并在该时间戳之前编写select语句以使其顺序。这对底层逻辑/数据库引擎中的错误或更改最不敏感。