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;
因篇幅问题不能全部显示,请点此查看更多更全内容