如何查看我的表列在H2数据库中是否为外键

问题描述 投票:0回答:3

我创建了两个表 user 和 contact。用户是父表,联系人是子表。我将 userId 称为联系人表中的外键。我已经完成了以下查询。

CREATE TABLE user(
  userId INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NULL,
  phone VARCHAR(50) NULL,
  email VARCHAR(50) NULL,
  address VARCHAR(150) NULL,
  loginName VARCHAR(45) NOT NULL,
  password VARCHAR(50) NOT NULL,
  role INT(1) NOT NULL DEFAULT 2,
  loginStatus INT(1) NOT NULL DEFAULT 1,
  PRIMARY KEY(userId),
);

======第二张表=========

CREATE TABLE contact(
  contactId INT NOT NULL AUTO_INCREMENT,
  userId INT NULL,
  name VARCHAR(50) NULL,
  phone VARCHAR(50) NULL,
  email VARCHAR(50) NULL,
  address VARCHAR(150) NULL,
  remark VARCHAR(150) NULL,
  PRIMARY KEY(contactId),
  CONSTRAINT fk_con_userId FOREIGN KEY (userId)
    REFERENCES user (userId)
  ON DELETE CASCADE ON UPDATE NO ACTION
);

要查看列信息,我在 H2 数据库中编写以下查询。

显示联系人的列;

但是我的表没有将 userId 显示为外键。

database h2
3个回答
14
投票

是的,您使用的

show
命令不显示外键。尽管如此,您创建的外键仍然在那里。

要检查外键是否存在,您可以查询

INFORMATION_SCHEMA
,如下所示:

select * from information_schema.constraints
  where table_name = 'CONTACT'
    and column_list = 'USERID';

此查询显示一行,为您提供 FK 的详细信息。

SQL
列的值为:

更改表 PUBLIC.CONTACT 添加约束 PUBLIC.FK_CON_USERID 外键(USERID)索引 PUBLIC.FK_CON_USERID_INDEX_6 删除级联 NOCHECK 时引用 PUBLIC.USER(USERID)


0
投票

在我的例子中,information_schema.constraints 不存在。 我必须这样做:

SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 

0
投票

这样的事情就可以了

select
   KCU.TABLE_SCHEMA,
   KCU.TABLE_NAME,
   KCU.CONSTRAINT_NAME,
   KCU.COLUMN_NAME,
   KCU.ORDINAL_POSITION,
   TC.CONSTRAINT_NAME
from
   INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU inner join 
      INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC on
      KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME

其中

TC.CONSTRAINT_NAME
将是
PRIMARY KEY
FOREIGN KEY

© www.soinside.com 2019 - 2024. All rights reserved.