Oracle增加修改刪除欄位/主鍵
阿新 • • 發佈:2018-12-30
修改欄位名稱
alter table xgj rename column old_name to new_name;
修改欄位型別
alter table tablename modify (column datatype [default value][null/not null],….);
栗子
假設表xgj,有一個欄位為name,資料型別char(20)。
create table xgj(
id number(9) ,
name char(20)
)
1、欄位為空,則不管改為什麼欄位型別,可以直接執行:
SQL> select * from xgj ;
ID NAME
---------- --------------------
SQL> alter table xgj modify(name varchar2(20));
Table altered
SQL>
2、欄位有資料,若相容,改為varchar2(20)可以直接執行:
--緊接著第一個情況操作,將name的型別改為建立時的char(20)
SQL> alter table xgj modify(name char(20));
Table altered
--插入資料
SQL> insert into xgj(id,name) values (1,'xiaogongjiang');
1 row inserted
SQL> select * from xgj;
ID NAME
---------- --------------------
1 xiaogongjiang
SQL> alter table xgj modify(name varchar2(20));
Table altered
SQL> desc xgj;
Name Type Nullable Default Comments
---- ------------ -------- ------- --------
ID NUMBER(9) Y
NAME VARCHAR2(20 ) Y
SQL> alter table xgj modify(name varchar2(40));
Table altered
SQL> alter table xgj modify(name char(20));
Table altered
3、欄位有資料,當修改後的型別和原型別不相容時 ,執行時會彈出:“ORA-01439:要更改資料型別,則要修改的列必須為空”
栗子:
--建表
create table xgj (col1 number, col2 number) ;
--插入資料
insert into xgj(col1,col2) values (1,2);
--提交
commit ;
--修改col1 由number改為varchar2型別 (不相容的型別)
alter table xgj modify ( col1 varchar2(20))
解決辦法:
- 修改原欄位名col1 為col1 _tmp
alter table xgj rename column col1 to col1_tmp;
- 增加一個和原欄位名同名的欄位col1
alter table xgj add col1 varchar2(20);
- 將原欄位col1_tmp資料更新到增加的欄位col1
update xgj set col1=trim(col1_tmp);
- 更新完,刪除原欄位col1_tmp
alter table xgj drop column col1_tmp;
總結:
1、當欄位沒有資料或者要修改的新型別和原型別相容時,可以直接modify修改。
2、當欄位有資料並用要修改的新型別和原型別不相容時,要間接新建欄位來轉移。
新增欄位
alter table tablename add (column datatype [default value][null/not null],….);
使用一個SQL語句同時新增多個欄位:
alter table xgj
add (name varchar2(30) default ‘無名氏’ not null,
age integer default 22 not null,
salary number(9,2)
);
刪除欄位
alter table tablename drop (column);
建立帶主鍵的表
create table student (
studentid int primary key not null,
studentname varchar(8),
age int);
1、建立表的同時建立主鍵約束
(1)無命名
create table student (
studentid int primary key not null,
studentname varchar(8),
age int);
(2)有命名
create table students (
studentid int ,
studentname varchar(8),
age int,
constraint yy primary key(studentid));
2、刪除表中已有的主鍵約束
(1)無命名
可用 SELECT * from user_cons_columns;
查詢表中主鍵名稱得student表中的主鍵名為SYS_C002715
alter table student drop constraint SYS_C002715;
(2)有命名
alter table students drop constraint yy;
3、向表中新增主鍵約束
alter table student add constraint pk_student primary key(studentid);