如何查看MariaDB中表或列的主键,以及查找视图的主键?
MariaDB主键查询方案
一、查看表/列的主键信息
要查询某个表的所有主键,或验证某列是否为主键,可直接查询information_schema.key_column_usage:
SELECT table_schema, table_name, column_name, ordinal_position FROM information_schema.key_column_usage WHERE table_schema = '你的数据库名称' AND table_name = '目标表名' AND constraint_name = 'PRIMARY';
如果要单独验证某列是否为主键,只需在WHERE条件中添加AND column_name = '目标列名'即可。
二、查找视图的主键
首先明确:视图本身没有主键——视图是基于表的虚拟结果集,并非物理存储的实体,因此MariaDB不会为视图存储主键定义。你之前的SQL语句失败,是因为试图直接从视图关联主键信息,但视图本身没有对应的主键记录。
针对你的PHP类生成器需求,可通过以下两种方式处理:
1. 获取视图依赖的底层表主键
如果视图基于单个表,或需要底层表的主键作为视图的逻辑主键,可用以下SQL关联视图的依赖表和主键信息:
SELECT kcu.table_schema, kcu.table_name AS source_table, kcu.column_name, kcu.ordinal_position FROM information_schema.view_table_usage vtu JOIN information_schema.key_column_usage kcu ON vtu.table_schema = kcu.table_schema AND vtu.table_name = kcu.table_name WHERE vtu.view_schema = '你的数据库名称' AND vtu.view_name = 'the_view' AND kcu.constraint_name = 'PRIMARY';
2. 推断视图的逻辑主键
如果视图是多表关联结果,或需要自定义逻辑主键,可结合SHOW COLUMNS/DESCRIBE的结果,按业务逻辑推断:
- 优先选择名称为
xxxId的字段(比如你提供的ReservationId) - 选择底层表的主键字段
- 若没有明显候选,可允许手动配置(适配自动类生成的场景)
从你给出的SHOW COLUMNS结果来看,ReservationId字段为无符号整数且不可为空,符合常见主键特征,可作为该视图的逻辑主键。
内容的提问来源于stack exchange,提问作者theking2
相关产品推荐
相关产品推荐

