oracle视频笔记
- 格式:docx
- 大小:155.67 KB
- 文档页数:40
racle常用的命令创建用户命令sql> create user username identified by passw修改用户密码password username删除用户drop user username【cascade】加cascade以后会把用户所建的表删除oracle规定:新创建的用户是没有登录数据库的权限系统权限用户对数据库的相关权限对象权限用户对其他用户的数据对象操作的权限角色分为:自定义角色(系统自带的)和预定义角色(自己创建的)赋权限grant 权限名to 用户名(常用的权限connect(连接权限)dba(系统权限),resource) 给表赋权限查询表的权限grant select on 用户名.表名to 用户名grant update on用户名.表名to 用户名.........把表的权限全部交给用户grant all on用户名.表名to 用户名权限的传播如果是对象权限,就加入width grant optiongrant select on 用户名.表名to 用户名width grant option如果是系统权限grant connect收回表的权限revoke select 用户名.表名from 用户名revoke update用户名.表名from 用户名.......收回表的所有权限revoke all 表名from 用户名oracle权限的回收时级联的,也就是说,当回收一个用户的权限时,也会把该用户有的用户权限回收查看表结构desc 表名使用profile管理用户口令概述:profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile。
当建立用户没有指定profile选项,那oracle就会将default分配给用户。
(1)概述:指定该账户登陆时最多可以输入密码的次数,也可以指定用用户锁定的时间(天)一般用dba的身份去执行该命令。
例子:指定system这个用户最多只能尝试3次登陆,锁定时间为2天,让我们看看怎么实现。
创建profile文件sql>create profile xx limit failed_login_attempts 3 password_lock_time 2;sql>alter user xxx profile xx;(2)给用户解锁sql>alter user xx account unlock;(3)终止口令sql>create profile myprofile limit password_life_time 10 password_grace_time 2;意思是:10后用户必须更改密码,期限为2天sql>alter user xx profile myprofile(4)口令历史概述:如果希望用户在修改密码时,不能使用以前使用过的密码,可使用口令历史,这样oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
例子:1)建立profilesql>create profile password_history limit password_life_time 10password_grace_time 2 password_reuse_time 10password_reuse_time 10//指定口令可重用时间即10天后就可以重用2)分配给某个用户sql>alter user xx profile myprofile3)删除profilesql>drop profile password_history【cascade】加cascade会把相关联的也删除oracle表的管理表名和列的命名规范a)必须以字母开头b)长度不能超过30字符c)不能使用oracle的保留字d)只能使用如下字符A—Z,a—z,0-9,$,#等oracle字符型char 定长最大2000字符例子:char(10)‘胡营’前四个字符放‘胡营’,后添6个空格不全varchar2(20)变长最大4000字符例子:varchar2(10)‘胡营’oracle分配四个字符,这样可节省空间clob(character large object)字符型大对象最大4G数字型number放回10的-38次方10的38次方number(5,2)表示一个小数有5为有效数,2位小数number(5)表示一个5位整数日期类型date 包含年月日和时分秒timestamp这是oracle9i对date数据类型的扩展图片类型blob 二进制数据可以存放图片/声音4G图片和声音一般不会放在数据库,除非是为了图片和声音的保密性,这样放在数据库会更安全修改表添加一个字段alter table 表名add (字段名类型);修改字段的长度alter table 表名modify (字段名类型);删除一个字段alter table 表名drop column 字段名;修改表的名字rename 原表名to 新表名;删除表drop table 表名表查询(简单)a)打开时间查看器sql>set timing on;SQL> select * from student;XH XM SEX BIRTHDAY SAL CLASSID ----- -------------------- --- ----------- --------- -------1 胡营男1990/9/15 61.55 122 胡营2 男1990/9/15 61.55 123 胡营3 男1990/9/15 61.55Executed in 0.032 secondsb)表数据复制insert into student select * from student;c) 查询为空的列信息select * from 列名is null 不为空:select * from 列名is not null (这个和ms sql 有区别)d) 过滤重复行select distinct 列1 from 表名e)oracle在使用算数表达式的时候,如果表达式中有一个字段的值为null,则整个表达式为null,例如:select gongzi *jiangjin+gongzi*2 from gongzibiaof)如何处理null值使用nvl函数来处理select gongzi *nvl(jiangjin,0)+gongzi*2 from gongzibiaog)以时间作为条件查询主要是注意格式select * from student where birthday >‘1-2月-90’;h)oracle的like使用方法和ms sql server一样i)oracle的in使用方法和ms sql server一样j)oracle的order by使用方法和ms sql server 一样k)列的别名排序select sal*12 “年薪”from student order by “年薪”desc;(注意:别名是中文的要带””,英文名不用带””)(注意:oracle查询区分大小写:select * from student where xh = ‘xx’/xh=’XX’) 表查询(复杂)a)分组函数max,min,avg,sum,count用法和ms sql server一样b)group by 和having子句group by用于对查询的结果分组统计having对统计结果进行筛选group by 列,这个‘列’一定要在查询结果中(分组总结:1.分组函数只能出现在选择列表(也就是max,min,avg等等),having,orderby子句中;2.如果在select语句中中同时包含有group by,having,order by那么它们的顺序是group by,having,order by)3.在选择列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则就会出错c)笛卡儿集多表查询没有写条件会出现笛卡尔集规定:多表查询的条件是,至少不能少于表的个数减1d)自连接自连接是指在同一张表的连接查询例如:显示某个员工的上级领导的姓名select , from emp worker,emp boss where worker.shangji = boss.shangji and = “xxx”;e)查询优化在写查询的时候,应该尽量把能筛选更多数据的条件放在右边,应为数据库扫面是从右边开始的例如:select * from student where stuName = “xxx”and stuNo < 20;而不是select * from student where stuNo < 20 and stuName = “xxx”;f)在多行子查询中使用all操作符例如:如何显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号select ename,sal,dept from emp where sal>all(select sal from emp where depton = 30);优化上面查询select ename,sal,dept from emp where sal>(select max(sal) from emp where depton =30);g)在多行子查询中使用any操作符例如:如何显示工资比部门30的任意一个员工的工资高的员工的姓名,工资和部门号select ename,sal,dept from emp where sal>any(select sal from emp where depton =30);查询优化select ename,sal,dept from emp where sal>(select min(sal) from emp where depton =30);h)多列子查询单行子查询是指子查询只返回单列,单行数据,多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句例如:如何查询与smith的部门和岗位完全相同的所有雇员select * from emp where (deptno,job) = (select depton,job from emp whereename=’smith’);i)合并查询a)union该操作符用于取得两个结果集的并集。