内容结构:
基础部分: 用户管理,表管理
高级部分:表查询,权限,角色,函数 数据库管理,约束,索引,事务,PL/sql编程
Oracle的基本使用
1. show user; 显示当前用户
2. exit(;) 断开数据连接且退出sqlplus
3. 连接命令: conn (connect) system/密码;
Disc[onnect] 断开连接;
Passw[ord] 修改用户的密码,若要修改其他用户的的密码,需要用sys/system登录
文件操作命令
1. start 和@
说明:运行sql脚本 sql>@ d:a.sql 或者sql>start d:a.sql
2. edit
编辑指定的sql脚本 sql>edit d:\a.sql
3. spool(将第一个spool以下和第二个spool以上的所有内容输出到指定内容中去)
将sql*plus屏幕上的内容输出到指定文件中去;sql>spoold:\b.sql 并输入到sql>spool off
显示和设置环境变量
控制输出的格式:
Linesize:设置显示行的宽度,默认是80个字符
Show linesize ; set linesize 90;
Pagesize 设置每页显示的行数目,默认是14。
Oracle用户管理
1. 创建用户create user 【用户名】xiaoming identified by【密码】m123;
注意:创建用户的权限需要系统管理员权限!!!
2. 删除用户
一般以DBA的身份去删除某个用户,如果用其他用户去删除用户则需要有drop user 的权限,当该用户已经新建了表,则需要级联删除!!!
Drop user 用户名 [cascade]
3. 创建的新用户没有任何权限,甚至登录数据库的权限都没有,需要为其制定相应的权限。给一个用户赋予权限是grant ,回收权限是revoke。
注意:权限,角色的分类
没有Create session 权限则无法连接数据库,
具有Resource权限的用户可以建表
对象权限:用户对其他用户的数据对象操作的权限,比如我新建的hfut用户对scott用户的emp表进行访问。包括:select、insert、update、delete、all(即前四种)、createindex等等。
让用户hfut拥有对用户scott的emp表的所有权限
【SQL> conn scott/tiger
已连接。
SQL>grant all on emp to hfut;
授权成功。】
权限回收:revoke注意谁赋予的权限,就要谁来回收权限!【revoke update on emp from hfut;】先回收hfut的update权限
希望用户hfut可以去查询scott用户的emp表,并且还希望把这个权限继续给别人(nus):
————如果是对象权限,就加入with grant option;
grant all on emp to hfut with grantoption ;
————如果是系统权限,就加入 with admin option
Grant connect on emp to hfut with admin option;
问题:当scott把hfut对于emp表的权限收回时,nus对emp表还有操作的权利的么?
答案是:nus失去了对emp表的权限,【用户管理实验笔记】
使用profile管理用户口令:
Profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile。当用户没有指定profile选项,那oracle会将default分配给用户。
(1) 账户锁定
指定该账户登录时最多输入密码的次数,也可以指定用户锁定的时间(天),一般用dba的身份去执行该命令。
例子:指定用户tea最多只能尝试登录三次,锁定时间为2天;
Create profile lock_account[文件名称] limit failed_login_attempts 3password_lock_time 2;
Alter user tea profile lock_acount;
账户解锁
Alter user tea account unlock;
(2) 终止口令
为了让用户定期修改密码可以使用中指口令来完成,同样这个命令也需要dba身份来完成。
例子:给前面创建的用户tea创建一个profile文件,要求用户每隔10天要修改自己的登录密码,宽限期限为2天。
Create profile myprofile[文件名] limit password_life_time 10 password_grace_time 2;
Alter user tea[用户名] profile myprofile ;
口令历史:
若希望用户在修改密码时,不能使用以前用过的密码,可以使用口令历史,这样oracle就会将口令修改的信息存放在数据字典中,这样当用户修改密码时,oracle机会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
例子:
1. 建立profile
Createprofile password_ history limit password_life_time 10 password_reuse_time10
password_reuse_time 10 // 制定口令可重用时间为10天,即十天后可以重用。
2. 分配给某一用户
Alter user【用户名】
删除profile :
当不需要某个profile文件时,可以删除文件
Drop profile password_history [cascade]
Oracle表的数据类型:
字符型:
Char 定长 最长2000字符 {查询效率高}
Char(10) “枫杨” 前四个字符放“枫杨”,后添6个空格补全
Varchar2(20) 变长最长4000字符
Varchar2(20) “春节” oracle 分配四个字符。这样可以节省空间
Clod 字符型大对象 最大4G
数字型:
Number范围±10的38次方。
Number(5,2) 表示5位有效数字,2位小数,—999.99到999.99
Number(5) 表示5位整数 范围 ±99999
建立表:
学生表
Create table student(
xh number(4),
sex char(2),
birthday date,
sal number(7,2)
);
班级表:
Create table classes (
calssId number(2),
cname varchar2(40),
);
修改表(Alter table *** )
添加字段:
Alter table student add(classid number(2),字段2 类型,……,字段n 类型);
修改字段长度:
Alter table student modify (xm varchar2(30));
修改字段的类型/或者名字(不能有数据):
Alter table student modify (xm char(30));
删除一字段:
Alter table student drop column sal ;
修改表的名称:
Rename student to stu ;
删除表
Drop table student ;
添加数据
Insert into student values(1,’xiaoming’,’男’,’11-12月-1997’,2.355);
如何插入带有日期的表,并按照年月日的格式插入?
to_date函数:
insert into emp values (999,'小红',to_date('1988-12-12','yyy-mm-dd'));
插入部分字段:
Insert into student values (‘A003’,‘jhon’,‘女’);
插入空值
Insert into student (xh,xm,sex,birthday,)
Values(‘A004’,’martin’,’男’,null);
[查询时,只能使用 is null 或者is not null]
修改一个字段的内容:
Update student set sex=‘女’,birthday = 10-9月-1996 where xh =’1001’;
修改含有null的数据
Is null
删除字段:
Delete from student;
删除记录,表结构还在,写日志,可以恢复,rollback,速度慢;
Drop table student;删除表结构和数据
Delete from student where xh=’001’;删除一条记录
Truncate table student ;
删除表中所有的记录,表结构还在,不写日志,无法找回删除记录,速度快。