oracle快速入门笔记

发布 2021-05-11 23:37:28 阅读 6957

小型数据库:access、foxbase

中型数据库:mysql、sqlserver、informix

大型数据库:oracle、db2、sybase

数据库的选择考虑因素主要有以下3点:

1. 负载量有多大,用户有多少。

2. 成本。

3. 安全性。

sys 超级管理员权限高于system

在命令行中输入:set oracle_sid = d**e(实例名)

sqlplus

conn sys/admin as sysdba( as sysdba 不能少否则报错);也可使用conn system/admin

sqlplus常用命令:

创建用户-授权。

和我们普通项目中的权限思想基本一致,相当于oracle数据库已经建好了用户和角色类,我们可以创建新的用户,把角色或权限直接授予用户,我们也可以创建新的角色。

自己不能删除自己的用户。

新创建的用户连登录数据库的权限都没有需要授权。

权限分系统权限(140多个)和对象权限(25个左右)。

系统权限是指用户对数据库的相关权限如:建库、建表、建索引、建存储过程、建函数、登录数据库等。

对象权限:用户对其他用户的数据对象(表、视图、存储过程、触发器、表空间、序列)操作的权限。

角色是权限的集合。

角色分:预定义角色和自定义角色。

sql> conn system/admin;

已连接。sql> grant resource to xiaoming;

授权成功。sql> conn xiaoming/m123;

已连接。sql> create table test(userid varchar2(12));

表已创建。授权:

grant select on emp to xiaoming;(将emp表的查询权限授予小明)

grant all on emp to zhangsan;(将emp表的所有权限增删改查等授予张三)

此时如果小明的表空间中也有emp表如何验证?

select * from

删除权限:revoke select on emp from xiaoming;

对权限的维护:

grant select on emp to xiaoming with grant option;

with admin option vs with grant option

不同点: with admin option 只能在赋予 system privilege 的时使用。

with grant option 只能在赋予 object privilege 的时使用。

撤消带有admin option 的system privileges 时,连带的权限将保留。

例如:1. dba 给了create table 系统权限给张三 with admin option

2. 张三建了若干张表。

3. 张三将建表系统权限给李四。

4. 李四建了若干张表。

5. dba 将张三的建表权限收回。

结果:张三‘s table 依然存在,但不能创建新的table 了。

李四’s table 依然存在,他还保留着create table 系统权限。

撤消带有grant option 的object privileges 时,连带的权限也将撤消。

例如:1. jeff 给了select object privileges 在emp 上 with admin option

2. jeff 给了select 权限在emp 上 to emi

3. 后来,撤消jeff的select 权限。

结果:emi 的权限也被撤消了。

建表。添加一个字段:

alter table 表名 add (classid number(4));

修改多个字段。

sql> alter table stu modify (stuno number(4),stuname char(2));

删除表的某个字段:

sql> alter table t_stu drop column classid;

table altered

修改表的名字:

sql> rename stu to t_stu;

table renamed

删除表:drop talbe t_stu;

insert into t_stu values(1,10001, '小明', 1999-09-09', 12300, 15)

ora-01861: 文字与格式字符串不匹配。

sql> alter session set nls_date_format = yyyy-mm-dd';

session altered

sql> insert into t_stu values(1,10001, '小明', 1999-09-09', 12300, 15);

1 row inserted

sql> select * from t_stu;

id stuno stunamebirthday salary classid

1 10001 小明1999-9-9 12300 15

sql>

设置保存点:

s**epoint aa;

恢复至保存点:rollback to aa;

删除表:truncate table t_class;删除表的所有数据,不写日志,速度很快,但无法找回删除的记录。

显示查询时间:set timing on;

24 rows selecte;

executed in 0.438 seconds

对表已有数据的复制:

insert into t_class(classid, classname) select * from t_class;

select sal*12+nvl(comm,0)*12 “年薪” from emp;

模糊查询:% 表示匹配任意多个字符 _表示匹配一个字符。

使用列的别名排序:order by 1

显示每个部门的每种岗位的平均工资和最低工资。其实就是按照多个字段分组group by deptno, job;

多表查询的条件:不能少于表的个数-1 如4张表的关联至少需要3个条件才能避免出现笛卡尔积。

多列子查询:

多列子查询则是指返回多列数据的子查询语句。当多列子查询返回单行数据时,在where子句中可以使用单行比较符。而返回多行数据时,在where字句中必须使用多行比较符。

(in,all,any)

select * from emp where (deptno,job)=(select deptno,job from emp where ename = smith’);

使用子查询比较多个列的数据时,既可以使用成对比较,也可以使用非成对比较。其中,成对比较要求多个列的数据必须同时匹配,而非成对比较则不要求多个列的数据必须同时匹配。

1. 成对比较示例。

select ename, sal, comm, deptno from emp

where (sal, nvl(comm, -1)) in (select sal, nvl(comm, -1) from emp where deptno=30);

2. 非成对比较示例。

select ename, sal, comm, deptno from emp

where sal in (select sal from emp where deptno=30) and nvl(comm, -1) in (select nvl(comm, -1) from emp where deptno=30);

oracle 表取别名时不要加as 否则报错。

oracle 分页:

共有3种方式:

select * from (

select e.*,rownum rn from (select * from emp) e where rownum <=最大值) where rn >=最小值。

2.如果只查询几列,只需要修改最里层视图即可。

select * from (

select e.*,rownum rn from (select empno, ename from emp) e where rownum <=12) where rn >=9

3.如果想在分页中按某些字段排序也只修改最里层视图即可。

select * from (select e.*,rownum rn from (select empno, ename, sal from emp order by sal desc) e where rownum <=12) where rn >=9

用查询结果直接创建表。

create table emp_bak (id, name, sal) as select empno, ename, sal from emp;

union: 该操作符用于取得两个结果集的幷集,当使用该操作符时会自动去掉结果集中重复行。

过滤掉重复的记录这点我之前不知道。

union all: 两个结果集直接相加不去除重复行。

intersect取交集。

minus: 从集合a中排除集合b中的元素。a可以比b小,不是数学意义上的减法,而是只要是这个元素在集合b中也存在就过滤掉。

事务一旦提交,之前设置的保存点将失效(消失)。

只读事务。如18点时统计本日销售量,之后新增或删除的记录都不在统计之列。

1.首先以system/admin账户登录,查看emp_bak表数据并设置开启只读事务。

2.以proxy/proxy登录系统插入2条数据。

proxy看到17条数据。

4. proxy看到的还是14条数据。

函数:substr(列名,从第几个字符开始, 截取几个字符);

将每个人名首字母大写,其余字母小写:

replace(列名,要替换的字符,替换后的字符)函数:

round(col,n) 四舍五入到小数点后几位,如果不写n默认为整数。

trunc(sal,n):截取到小数点后第几位,默认为整数,砍掉的位置0;

Oracle入门作业

oracle入门 实训作业。1 启动oracle数据库实例服务和监听服务。2 建立本地网络服务名。1 使用net manager新建立一个本地网络服务名。2 进入sqlplus,以用户sys 以管理员身份 连接。1 进入windows命令窗口,键入命令sqlplus 2 输入用户登录信息 sys 密...

摄影快速入门技巧

准确 一学就会数码相机 的秘诀 你是否曾经被 补偿的概念搞晕过?你是不是经常为不知道补偿多少 量而苦恼?也许你已经学会了使用包围 也许你已经知道了 亮加暗减 的规则,像使用胶片的摄影师那样操控相机。这篇文章告诉你一个非常使用 立竿见影而且一学就会的技术,让你从 胶片摄影师 苦练 的境遇中解脱出来。因...

oracle笔记

1 查看表的结构 desc tabledescription 2 set timing on 打开操作表的时间记录。3 消除重复行 distinct 4 大小写不区分的是列名,而不是里面的数据。1 可以对某一列直接进行加减乘除。两列相加。2 如果有一列为null,所得结果也为空。使用nvl函数处理n...