用于检查或查找作为主键列的列名的 SQL 查询
结构化查询语言或 SQL,由使用户能够创建数据库和表结构、执行各种类型的数据操作和数据管理以及查询数据库以提取有用信息的命令组成。我们将从创建数据库“geeksforgeeks”开始,然后我们将继续在该数据库中创建一个表“interns”。在此之后,我们将在表上执行我们的查询。
创建数据库:
CREATE DATABASE geeksforgeeks;
要使用上面创建的数据库:
USE geeksforgeeks;
创建表:
CREATE TABLE interns(
id SERIAL PRIMARY KEY,
name VARCHAR(30),
gender VARCHAR(1),
mobile BIGINT,
email VARCHAR(35),
city VARCHAR(25));
要查看上面创建的表的说明:
DESC interns;
插入数据到表中:
INSERT INTO interns(name, gender, mobile, email, city) VALUES ('Richa', 'F', '7999022923', 'richa@gmail.com', 'Delhi');
INSERT INTO interns(name, gender, mobile, email, city) VALUES ('Shivam', 'M', '9999028833', 'shivam@gmail.com', 'Pune');
INSERT INTO interns(name, gender, mobile, email, city) VALUES ('Varnika', 'F', '7919490007', 'varnika@gmail.com', 'Mumbai');
INSERT INTO interns(name, gender, mobile, email, city) VALUES ('Abhishek', 'M', '7610573879', 'abhishek@gmail.com', 'Bangalore');
查看插入的数据:
SELECT * FROM interns;
我们完成了创建数据库、创建表和向表中插入数据。现在,我们必须找出创建的表的 PRIMARY KEY 并且 PRIMARY KEY 应该是“id”。
要查找任何表的 PRIMARY KEY :
SELECT K.COLUMN_NAME FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS T
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
ON K.CONSTRAINT_NAME=T.CONSTRAINT_NAME
WHERE K.TABLE_NAME=‘YOUR-TABLE-NAME’
AND K.TABLE_SCHEMA=‘YOUR-DATABASE_NAME’
AND T.CONSTRAINT_TYPE=’PRIMARY KEY’ LIMIT 1;
例子 :
SELECT K.COLUMN_NAME FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS T
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE K
ON K.CONSTRAINT_NAME=T.CONSTRAINT_NAME
WHERE K.TABLE_NAME='interns'
AND K.TABLE_SCHEMA='geeksforgeeks'
AND T.CONSTRAINT_TYPE='PRIMARY KEY' LIMIT 1;
在这里,我们得到 COLUMN_NAME 作为“id”,即“interns”表的 PRIMARY KEY。
解释 :
INFORMATION_SCHEMA.TABLE_CONSTRAINTS 是一个表,它包含迄今为止在任何数据库中创建的所有表的信息。我们需要此表来验证 CONSTRAINT_TYPE。您可以通过运行以下查询来查看表提供的信息。
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
此外,我们还有 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表,它描述了哪些键列有约束。我们需要此表来获取 COLUMN_NAME。您可以通过运行以下查询来查看表提供的信息。
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
因此,我们在 CONSTRAINT_NAME 上加入了这两个表 TABLE_CONSTRAINTS (T) 和 KEY_COLUMN_USAGE (K)。我们已经从 K.TABLE_NAME = 'interns' 和 K.TABLE_SCHEMA = 'geeksforgeeks' 和 T.CONSTRAINT_TYPE = 'PRIMARY KEY' 的记录中选择了 K.COLUMN_NAME。