查询数据库中的主键和外键

SELECT 主键表名称=object_name(b.rkeyid)  

    ,主键列ID=b.rkey 

    ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) 

    ,外键表名称=object_name(b.fkeyid) 

    ,外键列ID=b.fkey 

    ,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid) 

    ,级联更新=ObjectProperty(a.id,'CnstIsUpdateCascade') 

    ,级联删除=ObjectProperty(a.id,'CnstIsDeleteCascade') 

FROM sysobjects a 

    join sysforeignkeys b on a.id=b.constid 

    join sysobjects c on a.parent_obj=c.id 

WHERE a.xtype='F' AND c.xtype='U' 

    --and object_name(b.rkeyid) like '%%' --主键表名

 

### MySQL 中主键的概念 在关系型数据库设计中,主键(Primary Key)用于唯一标识表中的每一行记录。这意味着在一个表内不允许存在两个具有相同主键值的行。通常情况下,主键应具备不可为空(NOT NULL)、唯一性(UNIQUE)这两个特性。 对于创建带有主键约束的表格,在 SQL 语句中可以这样定义: ```sql CREATE TABLE Student ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` 此命令会建立一张名为 `Student` 的新表,并指定整数类型的字段 `id` 成为此表的主键[^1]。 而(Foreign Key),则是用来维护不同数据表之间的参照完整性的一种机制。通过在上施加一定的规则来确保子表内的某些特定列的数据必须存在于父表对应的列里;换句话说就是说,当某条记录被其他地方引用着的时候就不能随意删除它所属的那个实体对象了。 下面是一个关于如何向已存在的产品表 (`tbl_products`) 移除的例子: ```sql ALTER TABLE tbl_products DROP FOREIGN KEY FK_Relationship_77; ``` 这表示解除与名称为 "FK_Relationship_77" 关联起来的产品表上的任何部链接限制条件[^3]。 为了更好地理解两者间的关系以及具体的应用场景,请考虑这样一个例子:假设有一个订单详情表 Orders 另一个商品列表 Products 表。如果希望保证每一个出现在 OrderDetails 记录里的 ProductID 都能在 Products 表找到对应项,则可以在前者增加一个指向后者 ID 字段作为其属性。 ```sql CREATE TABLE Products( ProductID int NOT NULL AUTO_INCREMENT, Name varchar(255), Price decimal(8,2), PRIMARY KEY(ProductID) ); CREATE TABLE OrderDetails( OrderDetailID int NOT NULL AUTO_INCREMENT, OrderID int NOT NULL, ProductID int NOT NULL, Quantity smallint unsigned NOT NULL DEFAULT 1, PRIMARY KEY(OrderDetailID), CONSTRAINT fk_product_id FOREIGN KEY (ProductID) REFERENCES Products(ProductID) ); ``` 上述脚本先建立了两张独立但有关联性的表——Products 及 OrderDetails 。其中最重要的一点在于最后几行代码设置了从 OrderDetails 到 Products 的连接,从而实现了两者的逻辑绑定[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值