MySQL通常按插入顺序来提取数据,而插入顺序是按主键进行的,但是从技术上讲,如果您拔出主键列名并按以下顺序进行排序,则您可以做同样的事情
SELECt whatever FROM tableORDER BY( SELECt `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERe (`TABLE_SCHEMA` = 'dbName') AND (`TABLE_NAME` = 'tableName') AND (`COLUMN_KEY` = 'PRI'));
对于复合键,您可以使用此
SELECt whatever FROM tableORDER BY( SELECt GROUP_CONCAt(`COLUMN_NAME` SEPARATOR ', ') FROM `information_schema`.`COLUMNS` WHERe (`TABLE_SCHEMA` = 'dbName') AND (`TABLE_NAME` = 'tableName') AND (`COLUMN_KEY` = 'PRI'));
来自 DOCS的
信息架构访问权限 ****
每个MySQL用户都有权访问这些表,但是只能看到表中与用户具有适当访问权限的对象相对应的行。在某些情况下(例如,INFORMATION_SCHEMA.ROUTINES表中的ROUTINE_DEFINITION列),特权不足的用户将看到NULL。这些限制不适用于InnoDB表。您只能以PROCESS权限查看它们。
相同的特权适用于从INFORMATION_SCHEMA中选择信息并通过SHOW语句查看相同的信息。无论哪种情况,您都必须对某个对象具有某种特权才能查看有关该对象的信息。
设置:
CREATE TABLE some_stuff ( firstID INT, secondID INT, username varchar(55), PRIMARY KEY (firstID, secondID)) ;
询问:
SELECt GROUP_CONCAt(`COLUMN_NAME` SEPARATOR ', ')FROM `information_schema`.`COLUMNS`WHERe (`TABLE_SCHEMA` = 'dbName') AND (`TABLE_NAME` = 'some_stuff') AND (`COLUMN_KEY` = 'PRI');
输出:
+--------------------------------------------+| GROUP_CONCAt(`COLUMN_NAME` SEPARATOR ', ') |+--------------------------------------------+| firstID, secondID |+--------------------------------------------+



