php mysql主外键表_关于php:如何在mysql中获取表的外键

我正在创建一个类,该类从数据库中获取一个表,并将其显示在具有尽可能多功能的网页上。 我要支持的事情之一是让类检测表中的哪些列对其具有外键约束,以便它可以转到这些表,获取所有值并在选择中使用它们 -box,当您编辑这些字段时会被调用,以避免有人违反外键约束,

主要问题是发现哪些字段具有外键约束,以及它们指向哪些表。 有谁知道如何做到这一点???

谢谢,

Lemiant

不久前我问了同样的问题-请参阅stackoverflow.com/questions/273794/

获取给定表外键的简单方法:

SELECT

`column_name`,

`referenced_table_schema` AS foreign_db,

`referenced_table_name` AS foreign_table,

`referenced_column_name`  AS foreign_column

FROM

`information_schema`.`KEY_COLUMN_USAGE`

WHERE

`constraint_schema` = SCHEMA()

AND

`table_name` = 'your-table-name-here'

AND

`referenced_column_name` IS NOT NULL

ORDER BY

`column_name`;

谢谢,正是我想要的

当前连接的数据库的table_schema = DATABASE()。

我没有得到constraint_schema = SCHEMA()部分,constraint_schema只是约束的名称,对吗? 应该是table_schema = your-db-name-here

INFORMATION_SCHEMA数据库包含所有其他数据库的完整架构的详细信息,包括约束:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

您还可以运行SHOW CREATE TABLE查询来获取创建表(包括其约束)的SQL。

要添加,FK信息仅在使用InnoDB存储的表上可用。 从手册中:For storage engines other than InnoDB, MySQL Server parses the FOREIGN KEY syntax in CREATE TABLE statements, but does not use or store it.

正如dev-null-dweller指出的那样,可以从MySQL的information_schema中检索很多内容,其中包括外键。

1个

SELECT * FROM information_schema.table_constraints

WHERE table_schema = 'dbname' AND table_name='mytable';

可以使用函数SCHEMA()代替dbname来在USE中设置数据库的名称。

2

正如Dan Grossman所指出的,

SHOW CREATE TABLE `yourtablename`

基本上可以用来获取create table语句的SQL转储。

?3

MySQL提供了SHOW KEYS命令。这样,如果您知道较低的基数阈值并且表中的其他键很少,则理论上可以得到FK。

SHOW KEYS FROM `address` WHERE Non_unique AND CARDINALITY > 10000

由于每次内部数据库更改时密钥的基数都会更改,因此这是理论上的。请参见基数更改,例如在运行ANALYZE TABLE的情况下。

?4

坚持使用命名架构(例如foreigntablename_foreignfieldname)很有用。例如,表billing中的字段user_id。大型Web内容框架的几个ORM使用此架构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值