一.新建用户
a.创建表空间
create tablespace _表空间名
datafile '__储存路径 '
size 20m 初始大小(自定义 单位:兆(m),(kb))
b.创建用户,将表空间分配给用户
create user 用户名 identified by ” _密码“
default table space _表空间名
c.登录(需要授权)
代码授权: grant connect , resource to 用户名
收回权限: revoke resource from 用户名
d.账号被管理员封了该怎么解封
-
界面版
登陆超级管理员界面(sysdba)编辑scott解锁
-
代码版
alter user 用户名 account unlock ---解锁
alter user 用户名 account lock ---上锁
二.oracle sql基础(数据管理)
Oracle 不区分大小写,与sql server不同的是Oracle只有一个数据库
a.数据类型
-
1.字符 char,varchar2,long char: 固变 1~2000字节 varchar2:可变长度 1~4000字节 long: 可变长度 2GB长度(一般不用)
-
2.数值 number:即是整数又是小数,默认整型 number[(p[,s])] ==p精度,s小数位 number(5,2) == 共5位,其中小数位2位 只要整型:number(5)
-
3.日期时间 Date:存储日期、时间类型。 日期转换函数:to_date('2016-02-02','yyyy-mm-dd') 例:
insert into tb_name(mydate) values(to_date('2016-02-02','yyyy-mm-dd hh:mi:ss'));
-
4.储存二进制数据,比如图片、视频、声音文件等 Raw或Raw Long LOB (常用,就是所谓的大数据,最大4GB) Clob: Blob: Bfile: (一般不把图片、视频等存在数据库中,只是把它们存放在硬盘地址保存到硬盘。 存在数据库里,要转换,资源消耗多)
b.数据定义语言DDL
create table -- 创建表
alter table -- 修改表
truncate table -- 删除表(删除数据,保留结构)
drop table -- 删除表(删除结构和数据)
c.数据操纵语言DML
insert -- 与sql server一致
delete -- 与sql server一致
update -- 与sql server一致
select -- 与sql有些不一样
d.事务控制语言TCL
commit -- 提交
rollback -- 回滚
savepoint -- 回滚的点
e.数据控制语言DCL
grant -- 授权
revoke -- 撤销授权
f.SQL操作符
1.算术运算符 + , - , * , /
SQL server语句: select sid,sname,sex+'生' from tb_name --看这案例,在SQL Server中这句话没问题 在oracle中会报错:ORA-10722:无效数字 在Sql Server中“+”既有算术作用,也有字符串拼接作用; 但在Oracle中,“+”就只有算术作用。
2.比较运算符 = ,!= ,< ,> , <= , >= ,between and ,in , ike , is null
3.逻辑运算符 not ,and, or
4.集合运算符 union行合并,union all
5.连接操作符 || 用来连接字符串
g.伪表dual与伪列rowid,rownum
-
伪表: select 'a' from dual;
-
伪列: select * from tb_name --如果结果集中出现三列,其实它有五列,还有两个列:rowid、rownum --rowid:唯一标识符,这是系统给的,不是我们自己定义的 --rownum:有点类似sql中的row_number()方法
怎么查看? select t.,rowid from tb_name t; select t..rownum from tb_name t;
注意:在Oracle项目中,一般都使用rownum做分页。
--这两个可以同时用吗?可以 select t.*,rowid,rownum from tb_name t --求前两条记录(Oracle不支持top) select a.*,rownum from emp a where rownum<3 --求第3、4条记录(注意:rownum只能作用于小于号) --解决办法:rownum是a表的伪列,把这伪列变成实列 select * from ( select a.*,rownum rid from emp a ) t where rid>2 and rid<5
三.函数
a.数字函数
-
四舍五入 round()
select round(54.345,2) from dual; 54.35 精确到小数点后2位
-
取整 trunc()
select trunc(45.67) from dual; 45 没有四舍五入功能
-
求模 mod() 与java中的%一样 select mod(11,7) from dual;
-
开方 power()
select power(5,2) from dual; --25 求5的2次方
-
开根号 sqrt() select sqrt(4) from dual;
-
判断值的正负数 sign() 正数返回1,0返回0,负数返回-1(以后常用)
select sign(10) from dual; --返回值是1
b.日期函数
-
获取系统当前时间 systimestamp
select systimestamp from dual;
结果比较长,格式是格林乔治时间
-
取月份实现加月份 add_months()
select add_months(sysdate,3) from dual; -- 在当前系统时间月份上加3 select add_months(to_date('2015-12-12','yyyy-mm-dd'),3) from dual; --在2015-12-12的月份上加3
-
取(年月日) extract()
select extract(day from sysdate) from dual; --取当前系统的日 select extract(month from sysdate) from dual; --取当前系统的月
c.字符串函数
-
字符串截取 substr()
select substr('abcdefg',2,4) from dual; -- 结果:bcde 从第2位开始截,截4个; --注意,java中字符串下标是从0开始,Sql和oracle中字符串下从标是1开始
-
求字符串长度(个数) length() 与中英文所占字节无关
select length('abc') from dual; -- 结果:3
-
查找字符位置 instr() 从第几位开始找哪个字符,类似于java中的charindex(),SQL Server中的indexof()
select instr('abcadefag','a',4) from dual; --结果:4
-
连接 concat() select concat('a','b') from dual; 结果:ab
-
替换 replace() select replace('abcdefg','a',9) from dual; 结果:9bcdefg
-
左填充 lpad() select lpad('abc',10,'6') from dual; --10是字符串总长度 结果:6666666abc
-
右填充 rpad() select rpad('abc',10,'6') from dual; 结果:abc6666666
-
trim() 有两个意思:去除字符串两边的空格 去除字符串两边指定的字符 语法:trim('字符1' from '字符串2') select trim('a' from 'aabbbccdda') from dual; 结果:bbbccdd
-
ASCII码对应的字符 chr() select chr(97) from dual; 结果:a
-
字符对应的ASCII码 ASCII() select ascii('a') from dual; 结果:97
11 .decode() decode(value,if1,then1,if2,then2,if3,then3,...,else)
表示如果value 等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。初看一下,decode()只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使decode()函数具备大于、小于或等于功能。
select decode('a','a',1,'b',2,'c',3) from dual;
d. 其它函数
-
转换空值函数
nvl(exp1,exp2) 如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。 select ename,nvl(comm, -1) from emp;
nvl2(exp1,exp2,exp3) 如果该函数的第一个参数为空那么显示第三个参数的值,如 果第一个参数的值不为空,则显示第二个参数的值。 select ename,nvl2(comm,-1,1) from emp;
nullif(exp1,exp2) 如果exp1和exp2相等则返回空(NULL),否则返回第一个值。 select ename,nullif(comm,-1) from emp;