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