Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中插入多行时的行顺序_Php_Sql_Mysql - Fatal编程技术网

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

Php 在MySQL中插入多行时的行顺序,php,sql,mysql,Php,Sql,Mysql,在PHP中,我创建并执行如下SQL查询 插入表(第1列、第2列、第3列)值 ('1','2','3'), ('A','B','C'), (‘AA’、‘BB’、‘CC’) 但是,每次尝试此操作时,它们插入数据库的顺序都不同。是否有一种方法可以确保它们按列出的顺序插入 补充: 谢谢你们的帮助。我曾经使用PHP从CSV文件创建MySQL表。在过去,我总是使用创建一个表并一次插入所有行。在这种情况下,SQL表的顺序始终与我的INSERT查询相同。然而,现在我正在创建一个MySQL,然后逐渐添加内容。这是

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

插入表(第1列、第2列、第3列)值
('1','2','3'),
('A','B','C'),
(‘AA’、‘BB’、‘CC’)

但是,每次尝试此操作时,它们插入数据库的顺序都不同。是否有一种方法可以确保它们按列出的顺序插入

补充: 谢谢你们的帮助。我曾经使用PHP从CSV文件创建MySQL表。在过去,我总是使用创建一个表并一次插入所有行。在这种情况下,SQL表的顺序始终与我的INSERT查询相同。然而,现在我正在创建一个MySQL,然后逐渐添加内容。这是数据库顺序变得随机的时候


我已经通过使用ALTER TABLE克服了这个问题。。。ORDER BY查询,但我很好奇,因为在第一种情况下有ORDER,现在它看起来非常随机。

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

关系从不定义ORDER,因此您不能依赖它。您可以使用ORDER BY子句来获得所需的结果。

插入它们的顺序并不重要,因为在将数据提取回来时,您可能会在查询中使用该子句。记住,MySQL是用来存储数据的,不一定是用来表示数据的

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

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

据我所知,无法强制INSERT语句按特定顺序出现。只需进行简单的选择,例如:

SELECT * FROM Table
ORDER BY column_name ASC
LIMIT 10
WHERE column_name = "test"
WHERE column_name IN (1, 2, 3)
--etc
也不会总是以相同的顺序返回数据。这是因为MySQL(以及所有其他数据库系统)是用来存储数据的,由开发人员适当地查询数据。幸运的是,有许多不同的方法来排序、限制和选择数据,例如:

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

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

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

时,顺序实际上可能会更改,即使DBMS不保证插入顺序,但插入顺序通常是FIFO。先进先出。

请参阅此相关问题和答案:请注意,此答案效率极低,因为它需要三个(或更多)单独的查询来完成一个查询中可以完成的任务。对于关注php的程序员来说,遵循前面帖子中的建议会更为谨慎。你没有看到微笑@eykanal吗?在任何情况下,其他答案都不能保证OP要求的插入顺序——这个答案可以做到这一点,尽管它可能不必要。除此之外,我的建议与其他人的建议相同:这很可能是不必要的,因为如果您想要排序,则数据集应该按顺序选择,如果您不想,则绝对不能保证您将获得特定(甚至一致)的排序。+1因为@paxdiablo answer是正确的答案。可能效率不高,但这正是Brian所问的:“是否有一种方法可以确保它们按列出的顺序插入?”甚至没有接近。DBMS生成无序数据集的顺序差别很大,从主键顺序到其他索引顺序取决于where子句,顺序受聚集索引甚至随机顺序的影响,这取决于您是否必须执行完整表扫描以及插入和删除的历史记录。请注意,这仅与引用完整性有关。@Leprechuan:是的,我是针对提供的示例说的。