Oracle 常用SQL命令
创建表空间1.创建默认表空间WLP_DAT CREATE TABLESPACE "MYSPACE" DATAFILE ‘D:oracleoradataorcldata/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 创建用户并授权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.主键约束: 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文件 imp1)imp 用户名/密码@服务器IP:端口/服务名 ?file=dmp文件路径; imp username/password@127.0.0.1:1521/orcl file=D:oracleadminorcldpdumpa.dmp; 2)将exp_export.dmp 中的表table1,table2导入 imp system/manager@hostname:1521/ora11g file=exp_export.dmp tables=table1,table2 impdp1)导到指定用户下 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.导出整个数据库实例下的所有数据 exp1)将数据库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:datanewsmgnt.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并不会自动创建,如果目录不存在导出会报错
给用户授予在该目睹读取的权限
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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |