数据库级别的外键

方法一:在建表的时候添加外键约束 

先建立一个年级表Grade

CREATE TABLE `Grade` (
    `gradeid` int(10) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
    `gradename` varchar(50) NOT NULL COMMENT '年级',
    PRIMARY KEY (`gradeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

在建立一个学生表,其中gradeid属性不为学生表Student的主码,但是为年级表Grade的主码,故外键为gradeid。学生表Student为参照关系,年级表Grade为被参照关系(关系数据库中一个表就是一个关系)。

CREATE TABLE `Student` (    
    `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    `pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `Sname` varchar(20) NOT NULL DEFAULT '匿名' COMMENT '学生姓名',
    `Ssex` varchar(2) NOT NULL DEFAULT '男' COMMENT '学生性别',
    `birthday` datetime DEFAULT NULL COMMENT '生日',
    `address` varchar(100) DEFAULT NULL COMMENT '家庭地址',
    `Email` varchar(50) DEFAULT NULL COMMENT '电子邮箱',
    `gradeid` int(10) NOT NULL COMMENT '学生所在年级',
    PRIMARY KEY (`id`),
    KEY `FK_gradeid` (`gradeid`),
    CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `Grade` (`gradeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 其中

KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `Grade` (`gradeid`)

也可直接写为

FOREIGN KEY `FK_gradeid` (`gradeid`) REFERENCES `Grade` (`gradeid`)

删除有外键关系的表(被参照关系)时,必须先删除外键或删除参照关系,才可以删除该表。

删除外键的语句

ALTER TABLE `Student` DROP FOREIGN KEY `FK_gradeid`;

删除表

DROP TABLE IF EXISTS `Grade`;

 方法二:创建表成功以后,添加外键约束

ALTER TABLE `Student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `Grade`(`gradeid`);

ALTER TABLE `Student` ADD FOREIGN KEY `FK_gradeid`(`gradeid`) REFERENCES `Grade`(`gradeid`);

 

 以上操作都是物理外键,数据库级别的外键,不建议使用(避免数据库过多而造成影响)。

最佳方法:

  • 数据库就是单纯的表(关系),只用来存放行(元组)和列(属性)
  • 我们想使用其他表的数据,想使用外键,用程序去实现(在应用层去实现,否则每次更新数据都得考虑级联)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值