您的当前位置:首页正文

ORACLE基本语句

来源:一二三四网


ORACLE基本语句

用户创建语句

oracle中创建用户语法如下:

CREATE USER username IDENTIFIED BY password

OR IDENTIFIED EXETERNALLY

OR IDENTIFIED GLOBALLY AS ‘CN=user’

[DEFAULT TABLESPACE tablespace]

[TEMPORARY TABLESPACE temptablespace]

[QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace

[,QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace

[PROFILES profile_name]

[PASSWORD EXPIRE]

[ACCOUNT LOCK or ACCOUNT UNLOCK]

其中,

CREATE USER username:用户名,一般为字母数字型和“#”及“_”符号。

IDENTIFIED BY password:用户口令,一般为字母数字型和“#”及“_”符号。

IDENTIFIED EXETERNALLY:表示用户名在操作系统下验证,该用户名必须与操作系统中所定义的用户名相同。

IDENTIFIED GLOBALLY AS ‘CN=user’:用户名由Oracle安全域中心服务器验证,CN名字表示用户的外部名。

[DEFAULT TABLESPACE tablespace]:默认的表空间。

[TEMPORARY TABLESPACE tablespace]:默认的临时表空间。

[QUOTA [integer K[M] ] [UNLIMITED] ] ON tablespace:用户可以使用的表空间的字节数。

[PROFILES profile_name]:资源文件的名称。

[PASSWORD EXPIRE]:立即将口令设成过期状态,用户再登录前必须修改口令。

[ACCOUNT LOCK or ACCOUNT UNLOCK]:用户是否被加锁,默认情况下是不加锁的。

创建用户实例

(1)创建用户,指定默认表空间和临时表空间。

创建用户名为wang,口令为wbtest,默认表空间为users,临时表空间为TEMP的用户。

示例1:

CREATE USER wang IDENTIFIED BY wbtest

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE TEMP;

在创建用户时通过QUOTA xxxM ON tablespace_name子句即可。

(2)创建用户,并配置磁盘限额。

创建一个用户名为wbtest,口令为wbtest,默认表空间为users,临时表空间为TEMP的用户,并且不 允许该用户使用SYSTEM表空间。

示例2:

CREATE USER wbtest IDENTIFIED BY wbtest

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE TEMP

QUOTA 0 ON SYSTEM;

(3)配置用户在指定表空间上不受限制。

创建一个用户名为test,口令为test,默认表空间为users,并且该用户使用users表空间不受限制

示例3:

CREATE USER test IDENTIFIED BY test

DEFAULT TABLESPACE users

QUOTA UNLIMITED ON users;

在创建用户时,以下几点特别需要特别注意。

初始建立的数据库用户没有任何权限,不能执行任何数据库操作。

如果建立用户时不指定DEFAULT TABLESPACE子句,Oracle会将SYSTEM表空间作为用户默认表空间。

如果建立用户时不指定TEMPORARY TABLESPACE子句,Oracle会将数据库默认临时表空间作为用户的临时表空间。

如果建立用户时没有为表空间指定QUOTA子句,那么用户在特定表空间上的配额为0,用户将不能在相应表空间上建立数据对象。

初始建立的用户没有任何权限,所以为了使用户可以连接到数据库,必须授权其CREATE SESSION权限

ORA-01045:user users lacks CREATE SESSION privilege;logon denied问题的解决方案

上诉问题是由于系统创建了用户users,但是没有给用户users赋予connect,resource权限导致,分配权限即可解决

grantconnect,resource to users

connect、resource和dba三种标准角色

授权语句:grant connect ,resource,dba to user with admin option;

(注意:其中的“with admin option”选项的含义是权限转授,该用户user能把他得到的这个权限再转授给其他用户user。)

经过授权以后,用户拥有connect、resource和dba三个角色的权限:

(1)Connect 角色,是授予最终用户的典型权利,最基本的权利,能够连接到ORACLE数据库中,并在对其他用户的表有访问权限时,做SELECT、UPDATE、INSERTT等操作。

Alter session--修改会话;

Create cluster--建立聚簇;

Create database link--建立数据库连接;

Create sequence--建立序列;

Create session--建立会话;

Create synonym--建立同义词;

Create view--建立视图。

(2)Resource 角色,是授予开发人员的,能在自己的方案中创建表、序列、视图等。

Create cluster--建立聚簇;

Create procedure--建立过程;

Create sequence—建立序列;

Create table--建表;

Create trigger--建立促发器;

Create type--建立类型。

(3)DBA角色,是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限。

从dba_sys_privs查看权限grantee privilege:

SQL>Select grantee,privilege fromdba_sys_privs

Wheregrantee=’resource’

Orderby privilege;

改变用户的密码

alter user angeos identified by oracle;

将用户angeos的密码改变为:oracle

创建表

create table classes(

id number(9) not null

primary key,

classname varchar2(40) not null

)

--

查询表

select * from classes;

SQL> select distinct job 工作from emp;去除重复项(DISTINCT的使用)

SQL> select '编号是:'||empno||'的雇员名字是'||ename||',工作是:'||job from emp;

编号是:7369的雇员名字是SMITH,工作是:CLERK

(使用||来连接字符串,字符串使用“’”来标注出来)

------------

SQL> select sal*10 from emp;(可以使用四则运算)

------------

selectempno,ename,job,sal,comm from emp where comm is not null;

(is not null的运用,not null不等于 0)

------------

SQL> select empno,ename,job,sal,comm from emp where comm is not null and sal>1500;

AND的运用

SQL> select empno,ename,job,sal,comm from emp where comm is not null or sal>1500;

OR的运用

SQL> select empno,ename,job,sal,comm from emp where not(comm is not null or sal>1500);

NOT的运用

SQL> select empno,ename,job,sal,comm from emp where sal between 1500 and 3000;

BETWEEN…a…AND…b…的运用,等价 a<=x<=b

select * from emp where ename='smith';

selectempno,ename,sal from emp where empno in (7499,7698,7900,0);

IN,NOT IN的使用,表示范围内,和范围外的。

上述语句相当于select empno,ename,sal from emp where empno=’7499’ or empno=’7698’ or empno=’7900’ or empno=’0’;

SQL> select empno,ename,sal from emp where ename like '_M%';

SQL>select empno,ename,sal from emp where ename like '%M%';

SQL>select empno,ename,sal from emp where ename like '%%';

LIKE的运用“%”可以匹配任意长度的内容,“_”可以匹配一个长度的内容

使用LIKE方便进行日期的查找功能。

Ex:select * from emp where hiredate like ‘%81%’;

SELECT {DISTINCT}*|具体的列 别名 FROM 表名称

{WHERE 条件 }

{ORDER BY 字段1,字段2 ASC|DESC}

select * from emp order by sal asc;

升降序的表示,和查询语句的格式

排序操作肯定放在SQL语句的最后执行

单行函数

分为:字符函数,数值函数,日期函数,转换函数,通用函数

单行数语法:

Function_name(column|expression,[arg1,arg2,….])

Function_name:函数名

Column:数据库列名

Expression:字符串或计算表达式

Arg1,arg2:在函数中使用参数

字符函数

Select upper(‘aaaa’) from dual; 让aaaa大写

Select lower(‘AAAA’) from dual; 让AAAA小写

Select initcap(‘hello,world’) from dual; 首字母大写

Select concat(‘hello’,’world’) from dual; 相当于||,链接的功能

Select Substr(‘x222x’,2,3) from dual;表示在’x222x’,取从第二位开始数三位字符(222)

Select Substr(‘x222xx’,-2,3) from dual;表示在’x222x’,取从倒数第二位开始数三位字符(2xx)

Select length(‘xxxxx) from dual;表示字符串长度

Select replace(‘x22x’,’2’,’x’) from dual;将x22x中的2换成x

Eg:select substr('i am from zhanjiang ,ha ha ha hahaha',1,5) 截取, length('i am ')长度, replace('i am',' ','X') 替换 from dual;

数值函数

四舍五入:ROUND()

截断小数位:TRUNC()

取余(取模):MOD()

EG:Select ROUND(763.521) from dual;

Select ROUND(763.521,2) from dual;

Select ROUND(763.521,-2) from dual;

四舍五入整数,-1为个位,-2表示十位,以此类推

对763.521进行四舍五入,第二个参数为设置其四舍五入位数。

Select TRUNC(763.521) from dual;舍去小数点

Select TRUNC(763.521, 2) from dual;舍去小数点后两位以后的数字

Select TRUNC(763.521,-2) from dual;舍去十位往后的数字,包括十位,注意第二参数正数与负数舍去位数的区别

Select MOD(10,3) from dual; 三对十取模

日期函数

规律:日期 - 数字=日期

日期 + 数字=日期

日期 – 日期=数字

Select sysdate from dual;获取系统时间

select ename,ROUND((sysdate-hiredate)/7) 入职星期数 from emp

MONTHS_BETWEEN(date1,date2):求出给定日期范围的月数

ADD_MONTHS(date,number):在指定日期上加上指定的月数,求出之后的日期

NEXT_DAY(date,char):下一个的char是哪一个日期。Char:为1~7或Monday/Mon~Sunday/ ,1表示星期日,2表示星期一,3表示星期二….类推

LAST_DAY():求出给定日期的最后一天日期

select ename,MONTHS_BETWEEN(sysdate,hiredate) 入职月数 from emp;MONTHS_BETWEEN的范例

select ename,add_months(sysdate,1) 为from emp; ADD_MONTHS的范例 注意该函数仅仅是将月份数加到第一参数时间上,如add_months(2013/10/2,2)----结果:2013/12/2

select NEXT_DAY(sysdate,3) from dual;next_day 的范例,注意该函数的参数

select last_day(sysdate) from dual;last_day的范例,获取给定日期当月的最后一天

转换函数

To_date():将给定字符串转换为date类型

To_char():将date类型转换为字符串类型

删除表

drop table students;

--

修改表的名称

rename alist_table_copy to alist_table;

--

显示表结构

describe test --

不对没查到

-----------------------

对字段的操作

-----------------------------------

--

增加列

alter table test add address varchar2(40);

--

删除列

alter table test drop column address;

--

修改列的名称

alter table test modify address addresses varchar(40;

--

修改列的属性

alter table test modi

create table test1(

id number(9) primary key not null,

name varchar2(34)

)

rename test2 to test;

--

创建自增的序列

create sequence class_seq increment by 1 start with 1 MAXVALUE 999999 NOCYCLE

NOCACHE;

select class_seq.currval from dual

--

插入数据

insert into classes values(class_seq.nextval,'软件一班')

commit;

--

更新数据

update stu_account set username='aaa' where count_id=2;

commit;

--

创建唯一索引

create unique index username on stu_account(username);

--

唯一索引

不能插入相同的数据

--

行锁

在新打开的对话中不能对此行进行操作

select * from stu_account t where t.count_id=2 for update; --

行锁

--alter table stuinfo modify sty_id to stu_id;

alter table students drop constraint class_fk;

altertable students add constraint class_fk foreign key (class_id) references classes(id);

--

外键约束

alter table stuinfo add constraint stu_fk foreign key (stu_id) references students(id) ON DELETE CASCADE;--

外键约束

查看表空间

SQL> select t.tablespace_name,round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespacest,dba_data_files d where t.tablespace_name=d.tablespace_name group byt.tablespace_name;

创建临时表空间

SQL> create temporary tablespace study

tempfile'E:\\oracle_tablespace\\study.dbf'

size 50m autoextend on next 50m maxsize 20480m extent management local;

删除临时表空间

droptablespace study including contents and datafiles cascade constraints;

创建表空间

SQL> create tablespacestudy_data logging

datafile'E:\\oracle_tablespace\\study_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;

因篇幅问题不能全部显示,请点此查看更多更全内容

Top