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

ecfdbz9o  于 2023-03-16  发布在  PHP
关注(0)|答案(7)|浏览(145)

在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查询克服了这个问题,但是我很好奇,因为在第一种情况下是有顺序的,现在看起来非常随机。

jm81lzqq

jm81lzqq1#

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

pjngdqdw

pjngdqdw2#

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

ej83mcc0

ej83mcc03#

插入的顺序并不重要,因为在提取数据时,您可能会在查询中使用ORDER BY子句。请记住,MySQL用于存储数据,而不一定用于显示数据。

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

pdkcd3nj4#

关系从来不定义顺序,所以你不能依赖它。你可以使用ORDERBY子句来得到想要的结果。

rsl1atfo

rsl1atfo5#

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

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时,顺序实际上都会改变。

2cmtqfgy

2cmtqfgy6#

即使数据库管理系统不能保证插入的顺序,但它通常是先进先出。

x33g5p2x

x33g5p2x7#

没有办法(据我所知)强制INSERT语句按照特定的顺序执行,只需要执行一个简单的选择,例如:

SELECT * FROM Table

也不会总是以相同的顺序返回数据。这是因为MySQL(以及所有其他数据库系统)是用来存储数据的,开发人员需要适当地查询数据。幸运的是,有许多不同的方法来排序、限制和选择数据,例如:

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

相关问题