A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马——兰雷明 黑马帝   /  2011-12-16 02:11  /  2488 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马——兰雷明 于 2011-12-27 16:48 编辑

主键与外键有哪些区别啊?在分别说说各自的用途。。。

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

4 个回复

倒序浏览
许超 黑马帝 2011-12-16 08:15:40
沙发
主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的.
外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据.

主键:表中记录的唯一标识

外键:依赖于别的表的数据

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
朱勋 黑马帝 2011-12-16 10:45:06
藤椅
定义主键是为了区别表中的每一条记录,外键是为了建立表之间的联系,方便使用,一切都是为了简化操作

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
张旭 黑马帝 2011-12-16 21:27:30
板凳
主键是用户选作标识表中记录的候选键      候选键是不含有多余属性的超键      超键是在关系中能唯一标识表中记录的属性集   
外键是在依赖表中的数据项 而且必须是参照表中的主键     这样就能建立表之间的联系    而且外键的取值只能是参照表中主键的值或为空

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
刘波 黑马帝 2011-12-19 14:14:40
报纸
主外键的存在是依托两个实体之间的关系而存在的;
比如班级与学生的关系:
一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;
那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢?
因为,你想一想班级表内如果放学生那么记录可能就是这样:
1班ID 1班 xx同学id
1班ID  1班 xx同学id
..
这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的;
下面简单给你讲下大概建成的表结构
--建班级表
create table class(
classid int primary key,--定义班级ID为主键
classname varchar(15)
)
--建学生表
create table students(
studentid int primary key,--定义学生ID为主键
classid int ,--外键值,跟班级表classid 属性类型相同
stuname varchar(20),--学生姓名
---定义外键
foreign key(classid) references class(classid) --本表classid是基于class表classid的外键
)
---------
如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如:
--在班级表为空的情况往学生表插入一条记录是不允许的:
insert into students(studentid,classid,stuname)values(1,1,'小明')
系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的;
必须要先往班级表内插入一条记录:
insert into class(classid,classname)values(1,'一班')
后才能执行插入前面一条往学生表插入信息的语句..

不过现在的主流已经不用设置外键了
一般喜欢用表连接Join在建立表与表之间的连接

希望对你有帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马