小型数据库: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...