Mysql 如何按相反顺序插入行?

Mysql 如何按相反顺序插入行?,mysql,sql,insert,row,sql-insert,Mysql,Sql,Insert,Row,Sql Insert,我要做的是将一个表中的行复制到另一个表中。我有两种选择,可以直接复制,也可以反向复制。我对直接订购没有问题。但我不能按相反的顺序插入它们。我试图用ORDERBY DESC来实现,但DESC不使用子查询。所以我用声明来做。并选择按主键的相反顺序返回我。但数据库my_DB_copy中的数据是按直接顺序插入的。如何按相反顺序插入它们 set @Query1=Concat ('INSERT INTO my_db_copy.test1 SELECT * FROM my_db.test1 ORDER BY

我要做的是将一个表中的行复制到另一个表中。我有两种选择,可以直接复制,也可以反向复制。我对直接订购没有问题。但我不能按相反的顺序插入它们。我试图用ORDERBY DESC来实现,但DESC不使用子查询。所以我用声明来做。并选择按主键的相反顺序返回我。但数据库my_DB_copy中的数据是按直接顺序插入的。如何按相反顺序插入它们

set @Query1=Concat ('INSERT INTO my_db_copy.test1 SELECT * FROM my_db.test1 
ORDER BY ', (   SELECT COLUMN_NAME
FROM information_schema.COLUMNS
WHERE (TABLE_SCHEMA = 'my_db')
  AND (TABLE_NAME = 'test1')
  AND (COLUMN_KEY = 'PRI')), ' DESC');
  PREPARE stmt FROM @Query1;
  EXECUTE stmt;    
SQL表表示无序集。不存在“颠倒”顺序的事情

可以将值指定给自动递增列以指定特定顺序

如果希望在发出查询时按特定顺序生成结果,则需要显式地包含一个
order by
。没有其他方法可以保证结果集按特定顺序排列。

SQL表表示无序集。不存在“颠倒”顺序的事情

可以将值指定给自动递增列以指定特定顺序


如果希望在发出查询时按特定顺序生成结果,则需要显式地包含一个
order by
。没有其他方法可以保证结果集按特定顺序排列。

此处的
@Query1
的结果值是多少?当您从结果查询中删除
INSERT
子句并仅执行
SELECT
及其
orderby
时,观察到的结果顺序是什么?这和你期望的有什么不同?您向我们展示的代码从您提出的问题中删除了几步。@David如果我从集合中删除INSERT,它将显示相反的顺序,但不会以相反的顺序插入。您认为这是为什么?如果这是结果的顺序,那么这就是它们被使用的顺序。以后您将按什么顺序选择目标表的结果来观察它们?如果您没有指定一个,那么就不能保证订单。听起来你好像在做假设。@David为了看到结果,我不按顺序选择它们,我的意思是我不按顺序选择。没有order by的查询的默认顺序是什么?虽然不能保证,但“默认”顺序通常很可能是主键,因为这通常是聚集索引和数据库引擎在磁盘上存储记录的物理顺序。这里的
@Query1
的结果值是什么?当您从结果查询中删除
INSERT
子句并仅执行
SELECT
及其
orderby
时,观察到的结果顺序是什么?这和你期望的有什么不同?您向我们展示的代码从您提出的问题中删除了几步。@David如果我从集合中删除INSERT,它将显示相反的顺序,但不会以相反的顺序插入。您认为这是为什么?如果这是结果的顺序,那么这就是它们被使用的顺序。以后您将按什么顺序选择目标表的结果来观察它们?如果您没有指定一个,那么就不能保证订单。听起来你好像在做假设。@David为了看到结果,我不按顺序选择它们,我的意思是我不按顺序选择。没有order by的查询的默认顺序是什么?虽然不能保证,但“默认”顺序通常很可能是主键,因为这通常是聚集索引和数据库引擎在磁盘上存储记录的物理顺序。谢谢您的回答。但是如果我有一个ID为12345的表,但是如果我想把它们复制到另一个ID为54321的表中。怎么做?@rdhd。我建议您提出另一个问题,提供样本数据和期望的结果。但请记住这里的第一条信息:表格无序。谢谢您的回答。但是如果我有一个ID为12345的表,但是如果我想把它们复制到另一个ID为54321的表中。怎么做?@rdhd。我建议您提出另一个问题,提供样本数据和期望的结果。但请记住这里的第一条信息:表是无序的。