oracle建立 主键 和 外键 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) , 谢谢!!!

参考技术A 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的数据也会自动删除;
可以写在同一行,但是要用逗号分格开;
望采纳,码字不容易

oracle 如何获取表的主键列名,如何获取表的所有列名

获取表的主键列名 SQL

技术分享图片 select   *   from   user_cons_columns   
技术分享图片  where   constraint_name   =   (select   constraint_name   from   user_constraints   
技术分享图片              where   table_name   =   ‘BST_FAVORITE‘  and   constraint_type   =‘P‘);   

记住:表名要大写
执行试试,该表所有主键都查出来了,主键列名就在第四列

获取表的所有列名 SQL

技术分享图片select * from table_name where rownum=1


这条sql语句相信大家都知道什么意思.

用jdbc编程查主键列名,可以通过以上第一条语句来查询.
还有一种方法可以查询表的主键列名,是使用jdbc编程方式,代码如下:

技术分享图片DatabaseMetaData dbmd=  conn.getMetaData();   
技术分享图片rs = dbmd.getPrimaryKeys(null,null,tableName.toUpperCase());    //要将表名转为大写才能正确取出主键来
技术分享图片            
技术分享图片while   (rs.next()) {
技术分享图片columnName=rs.getString(4);
技术分享图片System.out.println(columnName);
技术分享图片}

用jdbc获取表的所有列名,也可以通过以上第二条sql语句来获取,具体代码如下:

技术分享图片String sql="select * from table_name where rownum=1";
技术分享图片stm=conn.createStatement();
技术分享图片            rs=stm.executeQuery(sql);
技术分享图片            rs.next();
技术分享图片            
技术分享图片            ResultSetMetaData metadata=rs.getMetaData();
技术分享图片            for(int i=1;i<=metadata.getColumnCount();i++) {
技术分享图片                System.out.println(metadata.getColumnName(i));            }


















以上是关于oracle建立 主键 和 外键 的问题的主要内容,如果未能解决你的问题,请参考以下文章

oracle设置主键自增

oracle数据库建立序列使用序列实现主键自增

oracle数据库中的表设置主键自增

Oracle 中count 和count(*) 的区别

oracle 数据库中主键索引和唯一索引有啥区别

1Z0-051-DDL-2简单索引的创建和删除