oracle建立 主键 和 外键 的问题

本人超级菜鸟,在网上看到了这个:

oracle命令建立主键外键
1、创建一张学生表
[sql]
SQL> create table t_stu(
2 stuid number(10) primary key,
3 stuname varchar2(20) not null,
4 stusex varchar2(2) default '男' check(stusex in('男','女')));
Table created
Executed in 0.547 seconds
2、创建一张课程表
[sql]
SQL> create table t_couse(
2 couseid number(10) primary key,
3 cousename varchar2(20) not null,
4 cousetype varchar2(4));
www.2cto.com
Table created
Executed in 0.062 seconds
3、创建一张学生课程成绩表(包括主外键)
[sql]
SQL> create table t_score(
2 scoreid number(10) primary key,
3 stuid number(10) references t_stu(stuid),
4 couseid number(10),
5 constraint fk_couseid foreign key(couseid)
6 references t_couse(couseid)
7 on delete cascade);
Table created

请问:第三张表中的 3 stuid number(10) references t_stu(stuid), 这一行的作用是什么??? 和接下来的
4 couseid number(10),
5 constraint fk_couseid foreign key(couseid)
6 references t_couse(couseid)
7 on delete cascade);
有什么区别??

第七行 7 on delete cascade 的作用是什么???

为什么不能我把
4 couseid number(10),
5 constraint fk_couseid foreign key(couseid)
6 references t_couse(couseid)
写在同一行中会出现错误:此处不允许约束条件说明。
如:couseid number(10) constraint fk_couseid foreign key(couseid) references t_couse(couseid) ,

谢谢!!!

3 stuid number(10) references t_stu(stuid) 就是这个字段关联t_stu表的stuid字段;
4 couseid number(10),
5 constraint fk_couseid foreign key(couseid)
6 references t_couse(couseid)
7 on delete cascade); 这个是外键关联,并做同步删除操作,就是如果t_couse表中的某个couseid数据被删除了,那么这张表相关的数据也会自动被删除;跟上面的区别就在于有没有做删除操作;

on delete cascade 就是同步删除的意思,比如t_couse表中有个couseid=5,t_score表中也有couseid=5的数据,当删除t_couse表中couseid=5的数据时,t_score表中所有couseid=5的数据也会自动删除;

可以写在同一行,但是要用逗号分格开; 望采纳,码字不容易追问

3 stuid number(10) references t_stu(stuid) 就是这个字段关联t_stu表的stuid字段;

请问这个关联和下面4到7行的外键关联有什么区别???就是有没有做删除操作?

追答

3 stuid number(10) references t_stu(stuid) 建立的外键生成的名字是数据库自己分配的,constraint fk_couseid foreign key(couseid)建立的外键是你自己来命名的,on delete cascade);的意思就是同步关联删除,还有其他的操作,比如更新,设置成默认值等

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-13
stuid number(10) references t_stu(stuid)建立外键约束,约束名字是ORACLE自己命名的,后面那句你可以按自己的喜好命名, on delete cascade表示你在删除父表该行后子表也删除,
couseid number(10) constraint fk_couseid foreign key(couseid) references t_couse(couseid)中
couseid number(10)后面没加逗号,语法错了。本回答被网友采纳
相似回答