整理一下oracle数据库下关于表与属性的一些操作
1、表的创建
create table Test(
roomNo INTEGER NOT NULL,
hotelNo VARCHAR2(16) NOT NULL,
type VARCHAR2(32) NULL,
price VARCHAR2(32) NULL,
PRIMARY KEY (roomNo,hotelNo),
CONSTRAINTS check_type CHECK(type in ('Single','Double','Family')),
CONSTRAINTS check_roomNo CHECK(roomNo BETWEEN 1 AND 100)
)
2、表的重命名
直接重命名
rename test to room;
间接重命名
create room as select * from test;
drop test;
3、修改属性
添加属性
alter table room add (test varchar(20) null);
删除属性
alter table room drop column test;
修改属性名称
alter table room rename column roomNo to roomNum;
alter table room rename column hotelNo to hotelNum;
修改属性类型
1、假设字段数据为空,则不管改为什么字段类型,可以直接执行:
alter table room modify (hotelNum varchar2(20));
现在插入2条数据继续后续测试
insert into Room(roomNum,hotelNum,type,price)values('1','1','Single','32');
insert into Room(roomNum,hotelNum,type,price)values('2','这也是一个测试','Single','32');
2、假设字段有数据,则varchar2(20)改为nvarchar2(20)可以直接执行,扩大属性长度也是可以的。
但是以下情况会报错,比如int转varchar,又如想缩小属性的范围,又如nvarchar转varchar,都是不允许的,会报错
ORA-01463: 不能使用当前约束条件修改列数据类型
ORA-01441: 无法减小列长度, 因为一些值过大
ORA-01439: 要更改数据类型, 则要修改的列必须为空
alter table room modify (hotelNum nvarchar2(20));//成功
alter table room modify(hotelNum varchar(20));//成功
alter table room modify(roomNum varchar(20));//报错
alter table room modify(hotelNum varchar(10));//报错
alter table room modify(hotelNum varchar(20));//报错
3、假设字段有数据,而且类型更改失败,比如hotelNum在2中被修改为nvarchar(20), 我现在想修改为varchar(40),可以使用下面方法。
alter table room rename column hotelNum to hotelNo;//修改原来属性的名字
alter table room add hotelNum varchar2(40);//添加属性
update room set hotelNum=trim(hotelNo);//把原来的属性的值复制到新建的属性
alter table room drop column hotelNo;//删除原属性(会报错,因为hotelNo是主键)
//解决
alter table room drop primary key;//删除主键
alter table room drop column hotelNo;
alter table room add primary key(roomNum,hotelNum);//恢复主键
总结:
1、当字段没有数据或者要修改的新类型和原类型兼容时,可以直接modify修改。
2、当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。
4、有用的查询操作
查询当前scheme下的所有表
select table_name from tabs;
参考博客
http://www.cnblogs.com/flyingfish/archive/2010/01/15/1648448.html
http://blog.youkuaiyun.com/gdjlc/article/details/23762549
http://www.cnblogs.com/lonelyxmas/p/4099601.html