1. 程式人生 > >oracle 表約束的新增、修改以及約束的禁用啟用

oracle 表約束的新增、修改以及約束的禁用啟用

以下提到的內容都很簡單,所以不詳細說明,僅羅列一些語法:

一、主外來鍵的新增、刪除

1、向表中新增外來鍵約束,把emp表的deptno欄位設定為emp表的外來鍵,引用自dept表

      ALTER TABLE emp  ADD CONSTRAINT FK_test FOREIGN KEY(deptno) REFERENCES dept(deptno);

2、向表中新增主鍵約束 alter table emp add constraint pk_emp primary key(empno);

3、建立表的同時建立主鍵約束

(1)無命名 create table EMP( empno int  primary key not null, ename varchar(20), deptno int);

(2)有命名 create table EMP( empno int , ename varchar(20), deptno int , constraint PK_EMP primary key(empno));

4、刪除表中已有的主鍵約束

(1)無命名可用 SELECT * from user_cons_columns;

      如:SELECT * from user_cons_columns where table_name='EMP';

        查詢表中主鍵名稱得emp表中的主鍵名為PK_EMP

        alter table student drop constraint  PK_EMP;

(2)有命名 alter table emp drop constraint PK_EMP;

二、更改表的結構

  1.編輯表的欄位

  修改一個列的資料型別(一般限於修改長度,修改為一個不同型別時有諸多限制):

  語法:

  ALTER TABLE 表名 MODIFY(列名,資料型別);

  eg1:

  alter table skate_test modify (author number(10,0) )

  在修改列的長度時候,只能編輯比現有欄位實際存的長度還要大,否則提示下面的錯誤:

  ORA-01441: 無法減小列長度, 因為一些值過大

  eg2:

  alter table skate_test modify (author varchar2(10) )

  在修改列的資料型別的時候,所修改的列必須為空,否則提示下面的錯誤:

  ORA-01439: 要更改資料型別, 則要修改的列必須為空

  2.增加一個列

  語法:

  ALTER TABLE 表名 ADD(列名,資料型別);

  eg1:

  ALTER TABLE skate_test ADD(author NUMBER(38,0) not null);

  3.給列改名:

  語法:

  ALTER TABLE 表名 RENAME COLUMN 當前列名 TO 新列名;

  eg1:

  ALTER TABLE skate_test RENAME COLUMN author TO authorer_new

  4.刪除一個列

  語法:

  ALTER TABLE 表名 DROP COLUMN 列名;

  eg1:

  alter table skate_test drop column author

  5.將一個表改名

  語法:

  ALTER TABLE 當前表名 RENAME TO 新表名;

  eg1:

  alter table skate_test rename to test_sakte

  5.給表加註釋

  comment column on 表名.列名 is '註釋內容';   //修改表的列的註釋

  COMMENT ON TABLE MOVO_NEW.TEST_SAKTE  IS '註釋內容';  //修改表的註釋

三、主鍵、外來鍵等約束的啟用與禁用

這裡以外來鍵為例來說明

執行下面的查詢語句,我們會得到當前使用者下所有可以被查詢到的表的外來鍵,並生相應的修改語句。我們指需要把生成的結果copy出來執行就OK了。

不過對於alter語句的使用還是要謹慎,使用之前需要考慮清楚。

--刪除所有外來鍵約束 的Sql程式碼
select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP drop constraint FK_TEST;
--禁用所有外來鍵約束的Sql程式碼
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP disable constraint FK_TEST;
--啟用所有外來鍵約束的Sql程式碼
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'  
--alter table EMP enable constraint FK_TEST;

這裡有一點需要注意,在上面的查詢語句中where條件後帶的約束型別 constraint_type='R' ,我們這裡指定的是'R',可以猜想到,出來R之外還有其他的約束型別。

下面列出constraint_type的其他幾種型別及相應的含義:

Type Code Type Description Acts On Level
C Check on a table Column
O Read Only on a view Object
P Primary Key Object
R Referential AKA Foreign Key Column
U Unique Key Column
V Check Option on a view Object

所以,我們需要禁用哪類約束,就將查詢條件做相應的調整就好。