以前有一点开发的基础,对sql有一定的了解,但是在具体的实现中遇到很多问题。与开发不同,目前工作用到数据库知识较多,工作空闲之余学习oracle。下面是有关学习中的一些问题总结:
1.初入oracle
a.一般的使用sysdba用户登录(密码在安装数据库时设定)
b.在建立“用户”之前,需要创建表空间“tablespace”
create tablespace name --name是表空间名
datafile 'D:\dttbspace\rs01.dbf' size 100m autoextend on; --autoextend on 是不设置表空间的最大上限
drop tablespace tablespacename including contents and datafiles; --删除表空间
c.建立用户
create user username identified by password default tablespace tablespacename;
username:用户名; password:密码;tablespacename:用户的表空间名
drop user username cascade;
删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace
d.分配权限
权限需更具实际需求来非配,但是有些权限基本都要用上,如:
grant create session to username; --授权create session权限,保证用户能成功登陆
grant unlimited tablespace to username;--授权unlimited tablespace权限,让用户可以使用表空间
grant create table to test;-- 授权create table权限,让用户可以创建数据表(需在获得表空间权限的前提下)
grant dba to username;--将dba的所有权限授权给username用
这里不一一列举;
2.建表
create table test(--test为表名
id number(9,0) primary key ,--id为字段名(列名),number(9,0)数据类型为数字、长度为9、精确到小数后0位,primary key标示为主键(唯一的、非空的)
name varchar2(50) not null, --name为字段名(列名),varchar2(50)数据类型为字符、长度为50,not null不能为空
url varchar2(100) not null,
alexa number(9,0),
country varchar2(5)
);
3.删除表
drop table test; --删除表test
在表被删除后会留下一些痕迹,因为在oracle 10G之后有一个新特性闪回技术 。
在oracle10G之后,为了防止用户的错误删除,表的操作,专门提供了回收站的功能。用户删除的表会默认保存到回收站之中,也可以通过回收站进行表的恢复,所以此技术称为闪回(FLASHBACK);
查看回收站
SHOW RECYCLEBIN;
这个时候可以发现所有已经删除的表都在回收站中保存着,那么就可以将表进行恢复:
FLASHBACK TABLE 表名称 TO BEFORE DROP;
也可以直接删除回收站的数据:
PURGE TABLE 表名称;
清空回收站
PURGE RECYCLEBIN;
如果希望删除一张表,而又不希望这个表进入回收站中,则可以在删除的时候增加PURGE.
DROP TABLE 表名称 PURGE;--这是在oracle10G以后才有的,oracle11也有。
4.数据的插入
数据的插入有两种方式
INSERT INTO 表名 values(val1,val2,val3);--这种方式必须将所有字段都写上,列入表中有3个字段(3列),就必须按照列的顺序依次填写val
INSERT INTO 表名 (key1,key2,key3) values(val1,val2,val3);--除了not null的列,其余列可以不插入数据
5.序列:关于oracle中主键,和字段自增(自减、循环等)
CREATE SEQUENCE sequenceName -- 表名_字段名_seq / seq_字段_表名
[INCREMENT BY n]--自增n:number,一般是1
[START WITH n] --初始数字 1
[{MAXVALUE n|NOMAXVALUE}]--最大值,默认没有最大值
[{MINVALUE n|NOMINVALUE}]--最小值,默认没有最小值
[{CYCLE|NOCYCLE}]--是否循环,默认不循环
[{CACHEn| NOCACHE}] --缓存,默认没有缓存
如运行下面的sql后,便创建了一个名为 seq 的序列
CREATE SEQUENCE seq
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE;
在插入数据时,只需在使用自增(自减、循环等)的对应位置 用seq.nextval代替,不需要具体的数据。
insert into test values(seqseq.nextval,'淘宝','https://www.taobao.com/',13,'CN');