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 |
所以,我們需要禁用哪類約束,就將查詢條件做相應的調整就好。