CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
如何删除主键,因为没有约束定义?如何删除不使用约束名称的主键
CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
如何删除主键,因为没有约束定义?如何删除不使用约束名称的主键
“如何删除PK,因为没有定义的约束?”
其实它的每一个位那么简单,你可能希望:
SQL> create table t23 (id number primary key);
Table created.
SQL> select constraint_name, constraint_type
2 from user_constraints
3 where table_name = 'T23'
4/
CONSTRAINT_NAME C
------------------------------ -
SYS_C0034419 P
SQL> alter table t23 drop primary key;
Table altered.
SQL> select constraint_name, constraint_type
2 from user_constraints
3 where table_name = 'T23'
4/
no rows selected
SQL>
运行此得到约束名称:
SELECT *
FROM user_cons_columns
WHERE table_name = Persons;
然后运行
ALTER TABLE Persons
DROP CONSTRAINT <pk constraint>;
不要以为你能做到在1个SQL命令,不知道约束的名字,但你可以知道在这种情况下约束名称将由系统定义。一些以SYS....
开头的东西。
或者,您可以使用PLSQL
块来实现相同。
请参阅下面的例子以了解您的情况。
CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
查找约束名
select CONSTRAINT_NAME
From USER_CONSTRAINTS
where table_name='PERSONS'
AND CONSTRAINT_TYPE='P';
OUTPUT:= SYS_C0012152
跌落约束
ALTER TABLE PERSONS
DROP CONSTRAINT SYS_C0012152;
注:约束名SYS_C0012152
不是单引号括起来。
PLSQL块做同样的
declare
sql_stmt varchar2(255);
cons_name varchar2(30);
begin
select CONSTRAINT_NAME
into cons_name
From USER_CONSTRAINTS
where table_name='PERSONS'
AND CONSTRAINT_TYPE='P';
sql_stmt:=' ALTER TABLE PERSONS
DROP CONSTRAINT '||cons_name;
dbms_output.put_line(sql_stmt);
execute immediate sql_stmt;
end;
其实它可以在一个语句来完成。看到我的答案。 – APC