oracle 删除未命名外键问题
----
SQL> create table class(
2 cno number(2) primary key,
3 cname varchar2(10) not null);
Table created.
1 create table student(
2 sno number(5) primary key,
3 sname varchar2(20) not null,
4* cno number(2) references class(cno))
SQL> /
Table created.
-------
删除外键:
SQL> alter table student
2 drop primary key(cno);
drop primary key(cno)
*
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option
!!!!!!!!!!!!!!!!出错了0 0!真么回事呢
注:(如果给外键起个名却能删除,其他约束不起名也能栓出)
删除约束不是有两种方法:
1、删除指定内容的约束
alter table player drop unique(sname);
2、删除指定名称的约束
alter table player drop constraint p_ck;
======
用外键起的名删可以删除,
我想问的用指定内容为什么不好用呢? 展开
如果你 SQL 里面, 没有给 外键起名字, 那么数据库会 自动使用一个 算法, 来产生一个 唯一的名字
下面这个 SQL 用于在 Oracle 里面, 查询 所有的 外键信息。
你可以 通过 子表名 , 去查询, 那个 自动生成的 外键名字, 是什么。
然后就可以删除了。
SELECT
USER_CONS_COLUMNS.CONSTRAINT_NAME AS 约束名,
USER_CONS_COLUMNS.TABLE_NAME AS 子表名,
USER_CONS_COLUMNS.COLUMN_NAME AS 子表列名,
USER_CONS_COLUMNS.POSITION AS 位置,
USER_INDEXES.TABLE_NAME AS 主表名,
USER_IND_COLUMNS.COLUMN_NAME AS 主表列名
FROM
USER_CONSTRAINTS
JOIN USER_CONS_COLUMNS
ON (USER_CONSTRAINTS.CONSTRAINT_NAME
= USER_CONS_COLUMNS.CONSTRAINT_NAME)
JOIN USER_INDEXES
ON (USER_CONSTRAINTS.R_CONSTRAINT_NAME
= USER_INDEXES.INDEX_NAME)
JOIN USER_IND_COLUMNS
ON (USER_INDEXES.INDEX_NAME = USER_IND_COLUMNS.INDEX_NAME)
WHERE
CONSTRAINT_TYPE = 'R';
至于如何 删除 外键 , 语法是
ALTER TABLE 表名 DROP CONSTRAINT 外键约束名字;
至于
用指定内容为什么不好用呢?
这个因为 Oracle 的 语法不支持你这么做
因此你没法这么干.
参考资料: ALTER TABLE test_subDROP CONSTRAINT main_id_cons;