mysql怎么查表的外键
时间 : 2023-03-12 13:54:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在 MySQL 中,我们可以通过使用 DESC 命令或者 SHOW CREATE TABLE 命令来查看一张表的结构信息,也可以通过 SHOW CREATE TABLE 命令来查看一张表包含的外键信息。

下面分别介绍三种查看 MySQL 表外键信息的方法。

## 方法一:使用 DESC 命令查看表结构

我们可以使用 DESC 命令来查看一张表的结构信息,包括表的字段信息、类型、约束和注释等,其中外键信息也会一并显示出来。

具体用法如下:

```sql

DESC table_name;

其中,table_name 表示要查看信息的表名,执行该命令后,会显示出表的结构信息。

通过该命令,我们可以查看一个表中所有的外键,例如下面的表结构信息中包括两个外键:

mysql> DESC orders;

+-------------+------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------------+------------------+------+-----+---------+-------+

| order_id | int(10) unsigned | NO | PRI | NULL | |

| customer_id | int(10) unsigned | NO | MUL | NULL | |

| order_date | date | YES | | NULL | |

| total_price | decimal(10,2) | YES | | NULL | |

+-------------+------------------+------+-----+---------+-------+

其中,customer_id 字段的 Key 列显示为 MUL,表示该字段是一条外键。同时,我们还可以通过查询 INFORMATION_SCHEMA 库中的 KEY_COLUMN_USAGE 表,来查看表中的所有外键信息。

```sql

SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME

FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE

WHERE TABLE_NAME = 'table_name' and TABLE_SCHEMA='database_name';

其中,database_name 表示要查看信息的数据库名,table_name 表示要查看信息的表名。

通过该命令,我们可以查询到当前数据库中所有表的外键信息。

举个例子,我们查询 orders 表的键信息,可以使用如下 SQL 查询语句:

```sql

SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME

FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE

WHERE TABLE_NAME = 'orders' and TABLE_SCHEMA='shopping';

执行该命令后,会返回如下结果:

+----------------------------+-------------+-----------------------+------------------------+

| CONSTRAINT_NAME | COLUMN_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |

+----------------------------+-------------+-----------------------+------------------------+

| orders_customer_id_foreign | customer_id | customers | customer_id |

+----------------------------+-------------+-----------------------+------------------------+

结果中,orders_customer_id_foreign 表示该外键的约束名,customer_id 表示该外键在 orders 表中的字段名,customers 表示父表的表名,customer_id 表示父表中对应的字段名。

## 方法三:使用 SHOW CREATE TABLE 命令查看外键信息

我们可以使用 SHOW CREATE TABLE 命令来查看一张表的详细信息,包括表的创建语句、表的所有索引信息和外键信息等。

具体用法如下:

```sql

SHOW CREATE TABLE table_name;

其中,table_name 表示要查看信息的表名。执行该命令后,MySQL 会返回该表的详细信息,在 “CONSTRAINT” 关键字后面的部分就是该表的所有外键信息。

举个例子,我们查询 orders 表的创建语句和外键信息,可以使用如下 SQL 查询语句:

```sql

SHOW CREATE TABLE orders;

执行该命令后,会返回如下结果:

CREATE TABLE `orders` (

`order_id` int(10) unsigned NOT NULL,

`customer_id` int(10) unsigned NOT NULL,

`order_date` date DEFAULT NULL,

`total_price` decimal(10,2) DEFAULT NULL,

PRIMARY KEY (`order_id`),

KEY `orders_customer_id_foreign` (`customer_id`),

CONSTRAINT `orders_customer_id_foreign` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

结果中,orders_customer_id_foreign 表示外键的约束名,customer_id 列名表示该外键在 orders 表中的字段名,`customers` (`customer_id`) 表示父表名 customers 和父表中对应的字段名 customer_id。

当我们在进行数据库建模时,可能会设置表之间的关系,其中常用的关系类型有主键和外键。主键用于确保表中每一行数据的唯一性,而外键则用于表与表之间的关联。在开发中,如何查找表的外键也是非常重要的一项技能,可以通过如下两种方式查找表的外键。

1. 使用DESCRIBE语句

使用DESCRIBE语句可以查看表的结构信息,其中包括表的外键信息。示例如下:

DESCRIBE 表名;

例如,我们可以使用如下命令查找名为student的表的外键信息:

DESCRIBE student;

执行结果如下:

+------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+-------+

| id | int(11) | NO | PRI | NULL | |

| name | varchar(255) | NO | | NULL | |

| class_id | int(11) | YES | MUL | NULL | |

+------------+--------------+------+-----+---------+-------+

可以看到在student表中有一个名为class_id的字段,其拥有外键的索引。

2. 使用SHOW CREATE TABLE语句

使用SHOW CREATE TABLE语句则可以查看表的创建语句。示例如下:

SHOW CREATE TABLE 表名;

例如,我们可以使用如下命令查找名为student的表的外键信息:

SHOW CREATE TABLE student;

执行结果如下:

| student | CREATE TABLE `student` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL,

`class_id` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `class_id` (`class_id`),

CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |

可以看到在student表的创建语句中也包括外键信息,其中KEY `class_id` (`class_id`)代表class_id字段拥有索引,而CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`)代表class_id字段是student表的外键,参考的主键在class表中的id字段上。

总结

以上两种方式都可以查找表的外键信息,只不过DESCRIBE语句仅显示表的结构信息,而SHOW CREATE TABLE语句会显示完整的表的创建语句。在实际使用中可以根据情况选择不同的方法来查询表的外键。