Oracle 常用SQL命令

创建表空间

1.创建默认表空间WLP_DAT

CREATE TABLESPACE "MYSPACE" DATAFILE
'D:\oracle\oradata\orcl\data/WLP_DAT.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 32M
LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

2.创建临时表空间WLP_TEMP(用于缓存,可以不建)

ALTER TABLESPACE "TEMP" ADD TEMPFILE
'D:\oracle\oradata\orcl\data/WLP_TEMP.dbf' SIZE 32m REUSE autoextend on next 32m;

创建用户并授权

 1 CREATE USER "WLPING" PROFILE "DEFAULT" 
 2 IDENTIFIED BY "123456"
 3 DEFAULT TABLESPACE "MYSPACE"  //默认指定表空间
 4 TEMPORARY TABLESPACE "TEMP"  //指定缓存表空间
 5 ACCOUNT UNLOCK;   //用户非锁定
 6 
 7 GRANT EXECUTE ON dbms_comparison TO "WLPING";
 8 GRANT UNLIMITED TABLESPACE TO "XIR_MD";
 9 GRANT "CONNECT" TO "XIR_MD";
10 GRANT "RESOURCE" TO "XIR_MD";
11 
12 -- GRANT DBA TO XIR_MD;

PROFILE:Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。具体管理内容有:CPU的时间、I/O的使用、IDLE TIME(空闲时间)、CONNECT TIME(连接时间)、并发会话数量、口令机制等。

用户管理

oracle内部有两个建好的用户:system和sys。用户可直接登录到system用户以创建其他用户,因为system具有创建其他用户的权限。 在安装oracle时,用户或系统管理员首先可以为自己建立一个用户。

※ 使用sys as sysdba 可以获得数据库最高权限

一、创建用户

语法[创建用户]: create user 用户名 identified by 口令[即密码];

例子: create user test identified by test;

语法[更改用户]: alter user 用户名 identified by 口令[改变的口令];

例子: alter user test identified by 123456;

二、删除用户

语法:drop user 用户名;

例子:drop user test;

若用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字cascade,可删除用户所有的对象,然后再删除用户。

语法: drop user 用户名 cascade;

例子: drop user test cascade;

三、授权角色

oracle为兼容以前版本,提供三种标准角色(role):connect/resource和dba.

(1)讲解三种标准角色:

1》. connect role(连接角色)

--临时用户,特指不需要建表的用户,通常只赋予他们connect role. 

--connect是使用oracle简单权限,这种权限只对其他用户的表有访问权限,包括select/insert/update和delete等。

--拥有connect role 的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym)、回话(session)和其他  数据的链(link)

2》. resource role(资源角色)

--更可靠和正式的数据库用户可以授予resource role。

--resource提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。

3》. dba role(数据库管理员角色)

--dba role拥有所有的系统权限

--包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有

(2)授权命令

语法: grant connect, resource to 用户名;

例子: grant connect, resource to test;

(3)撤销权限

语法: revoke connect, resource from 用户名;

列子: revoke connect, resource from test;

角色管理

四、创建/授权/删除角色

除了前面讲到的三种系统角色----connect、resource和dba,用户还可以在oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有create role系统权限。

1》创建角色

语法: create role 角色名;

例子: create role testRole;

2》授权角色

语法: grant select on class to 角色名;

列子: grant select on class to testRole;

注:现在,拥有testRole角色的所有用户都具有对class表的select查询权限

3》删除角色

语法: drop role 角色名;

例子: drop role testRole;

注:与testRole角色相关的权限将从数据库全部删除

表操作

一、创建表

 1 CREATE TABLE MY_TABLE (
 2 ID NUMBER(10) PRIMARY KEY,
 3 NAME VARCHAR2(50) NOT NULL,
 4 BIRTHDAY DATE
 5 );
 6 // 表名注释
 7 COMMENT ON TABLE my_table IS '个人信息表';
 8 // 字段名注释
 9 COMMENT ON COLUMN MY_TABLE.ID IS 'ID';
10 COMMENT ON COLUMN MY_TABLE.NAME IS '姓名';

组合主键约束:CONSTRAINT PK_MY_TABLE PRIMARY KEY (column1,column2)

二、修改约束

禁用约束 disable constraint 约束名字;

删除约束 drop constraint 约束名字;

新增约束 alter table <表名 > add constraint  <主键名>

约束介绍

1.主键约束:
要对一个列加主键约束的话,这列就必须要满足的条件就是分空
因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)
以下是代码   要对一个列加主键,列名为id,表名为emp

格式为:
alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)
例子:
alter table emp add constraint ppp primary key (id)
————————————————————————————————
2.check约束:
就是给一列的数据进行了限制
比方说,年龄列的数据都要大于20的
表名(emp) 列名(age)
格式:
alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)
例子:
alter table emp add constraint xxx check(age>20)
______________________________________________________________________
3.unique约束:
这样的约束就是给列的数据追加的不重复的约束类型
格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)
————————————————————————————————
4.默认约束:
意思很简单就是让此列的数据默认为一定的数据
格式:
alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名
比方说:emp表中的gongzi列默认为10000
alter table emp add constraint jfsd default 10000 for gongzi
————————————————————————————————
5.外键约束:
这个有点难理解了,外键其实就是引用
因为主键实现了实体的完整性,
外键实现了引用的完整性,
应用完整性规定,所引用的数据必须存在!
其实就是个引用,
比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
id:表示产品的编号
ename:表示产品的名称
另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
id:表示用户号
did:表示购买的产品号
要让emp表中的did列去引用dept表中的id
可以用下面的方法
格式:
alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称(列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)

三、操作表

 rename 表名 to 表名  //修改表名
 
 truncate table 表名  //删除表中的所有数据,速度比delete快很多,截断表
 
 drop table 表名  //删除表

四、修改字段

 alter table 表名 modify (字段 字段类型);  -- 修改字段数据类型
 
 alter table 表名 rename column 列名 to 列名 --修改字段名
 
 alter table 表名 add 列名 字段类型; --增加字段
 
 alter table 表名 drop column 字段名;  -- 删除字段

五、修改数据

 insert into 表名(值1,值2) values(值1,值2);   // 插入数据
 
 update 表名 set 字段=[修改条件]   //修改数据
 
 delete from table  where 条件  //删除数据

六、查询

 /* 获取表:*/
 
 select table_name from user_tables; //当前用户的表
 
 select table_name from all_tables; //所有用户的表
 
 select table_name from dba_tables; //所有表,包括系统表(需要dba权限)
 
 select table_name from dba_tables where owner='WLPING';  //某个用户的表,包括所有的系统表(需要dba权限)

 

/*查询系统时间*/

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 

导入导出

总结: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
EXP不能导出分区表,而EXPDP可以

一、导入dmp文件

imp

1)imp 用户名/密码@服务器IP:端口/服务名  file=dmp文件路径;

imp username/password@127.0.0.1:1521/orcl file=D:\oracle\admin\orcl\dpdump\a.dmp;

2)将exp_export.dmp 中的表table1,table2导入

imp system/manager@hostname:1521/ora11g file=exp_export.dmp tables=table1,table2  

impdp

1)导到指定用户下

impdp scott/tiger DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp SCHEMAS=scott;  

2)改变表的owner

impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;  

3)导入表空间

impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=example;  

3)导入整个库文件

impdb system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp full=y; 

二、导出dmp文件

※ 导入导出指定日志输出文件 log=exp_export.log  

※ 在导出命令后面加上 compress=y  可以对导出文件进行压缩

1.导出整个数据库实例下的所有数据
2.导出指定用户的所有表
3.导出指定表

exp

1)将数据库ORACLE完全导出

exp sysuser/password@127.0.0.1:1521/ORCL file=D:d:\daochu.dmp full=y;

2)将数据库中WLP用户与,WLPING用户的表导出

exp username/password@127.0.0.1:1521/ORCL file=d:\daochu.dmp   owner=(WLP,WLPING);

3)将数据库中的表table1、table2导出

exp sysuser/password@127.0.0.1:1521/ORCL file= d:\data\newsmgnt.dmp tables=(table1,table2);

4)将数据库中的表table1中的字段filed1以"00"打头的数据导出

exp system/manager@loaclhost:1521/orcl file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\" log=exp_export.log;

expdp

创建逻辑目录(默认为oracle用户空间下的dpdump目录)

create directory DUMP_DIR as '/oracle/DUMP_DIR';  

在服务器上创建该目录,因为Oracle并不会自动创建,如果目录不存在导出会报错

  • mkdir -p /oracle/DUMP_DIR 

给用户授予在该目睹读取的权限

  • grant read,write on directory DUMP_DIR to scott; 

1)导整个数据库

expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp FULL=y;

2)按用户导

expdp scott/tiger@localhost:1521/ora11g schemas=scott dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;

3)并行进程parallel

 

expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp parallel=40 job_name=expdp40;

4)按表名导

expdp scott/tiger@localhost:1521/ora11g TABLES=emp,dept dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;

5)按查询条件导

expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp tables=emp query='WHERE deptno=20';

6)按表空间导

expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=temp,example;

序列

 新建序列

  CREATE SEQUENCE 序列名

  [INCREMENT BY n]    //步长 默认1  非零

  [START WITH n]      //开始值

  [{MAXVALUE/ MINVALUE n| NOMAXVALUE}]  //最大值/最小值

  [{CYCLE|NOCYCLE}]    //到达最大值是否循环,不循环时直接报错

  [{CACHE n| NOCACHE}];  //默认20,当有大量请求时使用缓存,预先生成多个序列提供使用,断开连接后会丢失未使用的序列值,导致序号不连续。

 实例:

1 create sequence seq_my_define
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increment by 1
6 nocycle
7 nocache;

查询序列当前值

select  seq_my_define.currval from dual;

查询下一增长值(提醒,这里虽然是查询,但序列值会改变,相当于++i):

select  seq_my_define.nextval from dual;

触发器

主键自增:oracle没有主键自增选项,需要自己使用触发器实现

1 CREATE OR REPLACE TRIGGER tr_my_define
2 BEFORE INSERT ON MY_WMPS_DEFINE FOR EACH ROW
3 begin
4     select seq_my_define.nextval into:new.id from dual;
5 end;

变量使用:

例子:将序列S_BOND_POOL_TREE的当前值与数据库ID最大值统一

变量可以在定义时赋值,也可以后面再赋值。

通过select语句将查询结果赋值给变量:select 字段名 into 变量名 from 表

execute immediate 'str'; //可以使用变量拼接字符串得到语句来执行

 1 DECLARE
 2   n NUMBER :=0;
 3 BEGIN
 4   select (num - S_BOND_POOL_TREE.nextval) into n
 5   from(
 6     select max(to_number( node_id)) as num from  XIR_TRD_J.TREE_NODE_INFO
 7   );
 8   IF n = 0 then return;
 9   ELSE
10     execute immediate 'alter sequence S_BOND_POOL_TREE increment by '|| n;
11     select S_BOND_POOL_TREE.nextval into n from dual; 
12     execute immediate 'alter sequence S_BOND_POOL_TREE increment by 1';
13   END IF;
14 END;

新增约束 alter table <表名 > add constraint  <主键名>

约束介绍

1.主键约束:
要对一个列加主键约束的话,这列就必须要满足的条件就是分空
因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)
以下是代码   要对一个列加主键,列名为id,表名为emp

格式为:
alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)
例子:
alter table emp add constraint ppp primary key (id)
————————————————————————————————
2.check约束:
就是给一列的数据进行了限制
比方说,年龄列的数据都要大于20的
表名(emp) 列名(age)
格式:
alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)
例子:
alter table emp add constraint xxx check(age>20)
______________________________________________________________________
3.unique约束:
这样的约束就是给列的数据追加的不重复的约束类型
格式:
alter table 表名 add constraint 约束名称 约束类型(列名)
比方说可以给ename列加个unique,让ename列的数据不重复
例子:
alter table emp add constraint qwe unique(ename)
————————————————————————————————
4.默认约束:
意思很简单就是让此列的数据默认为一定的数据
格式:
alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名
比方说:emp表中的gongzi列默认为10000
alter table emp add constraint jfsd default 10000 for gongzi
————————————————————————————————
5.外键约束:
这个有点难理解了,外键其实就是引用
因为主键实现了实体的完整性,
外键实现了引用的完整性,
应用完整性规定,所引用的数据必须存在!
其实就是个引用,
比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
id:表示产品的编号
ename:表示产品的名称
另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
id:表示用户号
did:表示购买的产品号
要让emp表中的did列去引用dept表中的id
可以用下面的方法
格式:
alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称(列名)

例子:

alter table emp add constraint jfkdsj foreign key (did) references dept (id)

三、操作表

 rename 表名 to 表名  //修改表名
 
 truncate table 表名  //删除表中的所有数据,速度比delete快很多,截断表
 
 drop table 表名  //删除表

四、修改字段

 alter table 表名 modify (字段 字段类型);  -- 修改字段数据类型
 
 alter table 表名 rename column 列名 to 列名 --修改字段名
 
 alter table 表名 add 列名 字段类型; --增加字段
 
 alter table 表名 drop column 字段名;  -- 删除字段

五、修改数据

 insert into 表名(值1,值2) values(值1,值2);   // 插入数据
 
 update 表名 set 字段=[修改条件]   //修改数据
 
 delete from table  where 条件  //删除数据

六、查询

 /* 获取表:*/
 
 select table_name from user_tables; //当前用户的表
 
 select table_name from all_tables; //所有用户的表
 
 select table_name from dba_tables; //所有表,包括系统表(需要dba权限)
 
 select table_name from dba_tables where owner='WLPING';  //某个用户的表,包括所有的系统表(需要dba权限)

 

/*查询系统时间*/

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 

猜你喜欢

转载自www.cnblogs.com/wlping265/p/9047398.html