Dev*_*von 9 mysql sql sql-order-by primary-key
某些SQL服务器允许使用通用语句,例如ORDER BY PRIMARY KEY.我不认为这适用于MySQL,是否有任何此类解决方法允许跨多个表自动选择或是否需要查询查询来确定主键?
我一直在努力的解决方法涉及SHOW COLUMNS FROM在运行查询之前调用.有更有效的方法吗?MySQL可以在选择过程中确定表的主键吗?
更新: 正如戈登指出的那样,在MySQL或SQL中没有官方的方法可以做到这一点.SAP具有自定义功能.有一些解决方法,例如与John 一起工作SHOW COLUMNS FROM table或information_schema正如John指出的那样.
MySQL通常通过主键的插入顺序来提取数据,但是除非你在技术上可以做同样的事情,如果你拿出主键列名并按顺序放入
SELECT whatever FROM table
ORDER BY
( SELECT `COLUMN_NAME`
FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'dbName')
AND (`TABLE_NAME` = 'tableName')
AND (`COLUMN_KEY` = 'PRI')
);
Run Code Online (Sandbox Code Playgroud)
对于复合键,您可以使用它
SELECT whatever FROM table
ORDER BY
( SELECT GROUP_CONCAT(`COLUMN_NAME` SEPARATOR ', ')
FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'dbName')
AND (`TABLE_NAME` = 'tableName')
AND (`COLUMN_KEY` = 'PRI')
);
Run Code Online (Sandbox Code Playgroud)
来自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)
) ;
Run Code Online (Sandbox Code Playgroud)
SELECT GROUP_CONCAT(`COLUMN_NAME` SEPARATOR ', ')
FROM `information_schema`.`COLUMNS`
WHERE (`TABLE_SCHEMA` = 'dbName')
AND (`TABLE_NAME` = 'some_stuff')
AND (`COLUMN_KEY` = 'PRI');
Run Code Online (Sandbox Code Playgroud)
+--------------------------------------------+
| GROUP_CONCAT(`COLUMN_NAME` SEPARATOR ', ') |
+--------------------------------------------+
| firstID, secondID |
+--------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11042 次 |
| 最近记录: |