diff --git a/node_modules/loopback-connector-mysql/lib/discovery.js b/node_modules/loopback-connector-mysql/lib/discovery.js
index 615c54d..728feb7 100644
--- a/node_modules/loopback-connector-mysql/lib/discovery.js
+++ b/node_modules/loopback-connector-mysql/lib/discovery.js
@@ -157,34 +157,87 @@ function mixinDiscovery(MySQL, mysql) {
   MySQL.prototype.buildQueryColumns = function(schema, table, options = {}) {
     let sql = null;
     if (schema) {
-      sql = paginateSQL('SELECT table_schema AS "owner",' +
-        ' table_name AS "tableName",' +
-        ' column_name AS "columnName",' +
-        ' data_type AS "dataType",' +
-        ' character_maximum_length AS "dataLength",' +
-        ' numeric_precision AS "dataPrecision",' +
-        ' numeric_scale AS "dataScale",' +
-        ' column_type AS "columnType",' +
-        ' is_nullable = \'YES\' AS "nullable",' +
-        ' CASE WHEN extra LIKE \'%auto_increment%\' THEN 1 ELSE 0 END AS "generated"' +
-        ' FROM information_schema.columns' +
-        ' WHERE table_schema=' + mysql.escape(schema) +
-        (table ? ' AND table_name=' + mysql.escape(table) : ''),
-      'table_name, ordinal_position', {});
+      sql = paginateSQL(
+        `SELECT
+            cols.table_schema AS "owner",
+            cols.table_name AS "tableName",
+            cols.column_name AS "columnName",
+            cols.data_type AS "dataType",
+            cols.character_maximum_length AS "dataLength",
+            cols.numeric_precision AS "dataPrecision",
+            cols.numeric_scale AS "dataScale",
+            cols.column_type AS "columnType",
+            cols.is_nullable = 'YES' AS "nullable",
+            CASE WHEN cols.extra LIKE '%auto_increment%' THEN 1 ELSE 0 END AS "generated",
+            indexes.index_name AS "indexName",
+            indexes.non_unique AS "nonUnique",
+            indexes.seq_in_index AS "seqInIndex",
+            indexes.cardinality AS "cardinality",
+            indexes.index_type AS "indexType",
+            CASE WHEN fk.column_name IS NOT NULL THEN 1 ELSE 0 END AS "isForeignKey"
+        FROM
+            information_schema.columns cols
+        LEFT JOIN
+            information_schema.statistics indexes
+        ON
+            cols.table_schema = indexes.table_schema
+            AND cols.table_name = indexes.table_name
+            AND cols.column_name = indexes.column_name
+        LEFT JOIN
+            information_schema.KEY_COLUMN_USAGE fk
+        ON
+            cols.table_schema = fk.table_schema
+            AND cols.table_name = fk.table_name
+            AND cols.column_name = fk.column_name
+            AND fk.referenced_table_name IS NOT NULL
+        WHERE
+            cols.table_schema = ${mysql.escape(schema)}
+        ${table ? ' AND cols.table_name = ' + mysql.escape(table) : ''}
+        `,
+        'cols.table_name, cols.ordinal_position',
+        {},
+      );
     } else {
-      sql = paginateSQL('SELECT table_schema AS "owner",' +
-        ' table_name AS "tableName",' +
-        ' column_name AS "columnName",' +
-        ' data_type AS "dataType",' +
-        ' character_maximum_length AS "dataLength",' +
-        ' numeric_precision AS "dataPrecision",' +
-        ' numeric_scale AS "dataScale",' +
-        ' column_type AS "columnType",' +
-        ' is_nullable = \'YES\' AS "nullable",' +
-        ' CASE WHEN extra LIKE \'%auto_increment%\' THEN 1 ELSE 0 END AS "generated"' +
-        ' FROM information_schema.columns' +
-        (table ? ' WHERE table_name=' + mysql.escape(table) : ''),
-      'table_name, ordinal_position', {});
+      sql = paginateSQL(
+        `SELECT
+            cols.table_schema AS "owner",
+            cols.table_name AS "tableName",
+            cols.column_name AS "columnName",
+            cols.data_type AS "dataType",
+            cols.character_maximum_length AS "dataLength",
+            cols.numeric_precision AS "dataPrecision",
+            cols.numeric_scale AS "dataScale",
+            cols.column_type AS "columnType",
+            cols.is_nullable = 'YES' AS "nullable",
+            CASE WHEN cols.extra LIKE '%auto_increment%' THEN 1 ELSE 0 END AS "generated",
+            indexes.index_name AS "indexName",
+            indexes.seq_in_index AS "indexColumnOrder",
+            indexes.non_unique AS "nonUnique",
+            indexes.cardinality AS "cardinality",
+            indexes.index_type AS "indexType",
+            CASE WHEN fk.column_name IS NOT NULL THEN 1 ELSE 0 END AS "isForeignKey"
+         FROM
+            information_schema.columns AS cols
+         LEFT JOIN
+            information_schema.statistics AS indexes
+         ON
+            cols.table_schema = indexes.table_schema
+            AND cols.table_name = indexes.table_name
+            AND cols.column_name = indexes.column_name
+         LEFT JOIN
+            information_schema.KEY_COLUMN_USAGE AS fk
+         ON
+            cols.table_schema = fk.table_schema
+            AND cols.table_name = fk.table_name
+            AND cols.column_name = fk.column_name
+            AND fk.referenced_table_name IS NOT NULL
+         WHERE
+            cols.table_schema = ${mysql.escape(schema)}
+            ${table ? ' AND cols.table_name = ' + mysql.escape(table) : ''}
+        `,
+        'cols.table_name, cols.ordinal_position',
+        {},
+      );
     }
     if (options.orderBy) {
       sql += ' ORDER BY ' + options.orderBy;
