在MySQL中插入多行时的行顺序

时间:2009-12-23 02:07:07

标签: php sql mysql

在PHP中,我创建并执行如下的SQL查询。

INSERT INTO Table (Column1, Column2, Column3) VALUES
('1', '2', '3'),
('A', 'B', 'C'),
('AA', 'BB', 'CC');

但是,每次尝试时,它们插入数据库的顺序都不同。有没有办法可以确保按照列出的顺序插入它们?

增加: 谢谢大家的帮助。我已经使用PHP从CSV文件创建MySQL表一段时间了。在过去,我总是使用创建的表并一次性插入所有行。在这些情况下,SQL表始终与我的INSERT查询具有相同的顺序。但是,现在我正在创建一个MySQL,然后逐渐添加内容。这是数据库顺序变为随机的时候。

我已经通过使用ALTER TABLE ... ORDER BY查询来解决这个问题,但我很好奇,因为在第一种情况下有顺序,现在它似乎非常随机。

7 个答案:

答案 0 :(得分:4)

默认顺序是执行insert语句的顺序。除非行之间存在层次关系,否则插入的顺序无关紧要。如果您希望以一致的方式输出,则必须在查询中定义ORDER BY子句。

答案 1 :(得分:3)

如果要按特定顺序检索行,唯一可以确定的方法是使用ORDER BY子句。

答案 2 :(得分:3)

他们插入的顺序并不重要,因为在将数据拉回时,您可能会在查询中使用ORDER BY子句。请记住,MySQL用于存储数据,不一定要呈现数据。

SELECT col1, col2
FROM table1
ORDER BY col2 ASC // fixes any ordering issues in the native-storage

答案 3 :(得分:2)

关系永远不会定义顺序,所以你不能依赖它。您可以使用ORDER BY子句来获得所需的结果。

答案 4 :(得分:1)

有一种方法可以保证插入顺序:

INSERT INTO Table (Column1, Column2, Column3) VALUES ('1', '2', '3');
INSERT INTO Table (Column1, Column2, Column3) VALUES ('A', 'B', 'C');
INSERT INTO Table (Column1, Column2, Column3) VALUES ('AA', 'BB', 'CC');

: - )

但是你需要理解SQL是一个关系代数,使用结果集,并且插入事物的顺序无关紧要。除非其中一列是某种时间戳,或者你有一个自动增量字段要按三个特定顺序设置,否则无关紧要(这两者实际上并不是想要订单的好理由)控制)。

除非您指定所需的顺序,否则在提取行时不能保证任何特定内容,因此您不应该关注它们的创建顺序。如果没有order by子句,每次执行select时,订单实际上都会发生变化。

答案 5 :(得分:1)

即使DBMS不保证插入顺序,它通常也是FIFO。先进先出。

答案 6 :(得分:0)

没有办法(我知道)强制INSERT语句在特定的Order中发生。只做一个裸选,例如:

SELECT * FROM Table

也不会始终以相同的顺序返回数据。这是因为MySQL(和所有其他数据库系统)用于存储数据,开发人员可以适当地查询它。幸运的是,有许多不同的方式来订购,限制和选择数据,例如:

ORDER BY column_name ASC
LIMIT 10
WHERE column_name = "test"
WHERE column_name IN (1, 2, 3)
--etc