Oracle命令实践(1)
开篇:本学期开了一门实验课oracle,上学期开的是sqlserver,但是我在实习公司的时候学的是mysql,所以非常杂,这里就有必要深入点了。于是想将学过的命令语句搜集起来便于复习,老师教的是用sqlplus进行的操作,我在自己的电脑上进行了相应的练习操作。
在此之前先进行一下关于sqlplus的操作,:
一、sqlplus运行环境的设置
1. set命令
1.Set linesize 300 //设置每行显示的长度
2.Set pagesize 30 //设置每页显示条数,解决上面命令操作后出现行重复的问题。
3. column field_name format a40 //修改每列显示的显示宽度(每次都要执行)
4. col filed_name for a40 //简写
5. set time on //设置时间
6. clear SCR //清除屏幕上的命令,命令太多就用这一条吧
7. desc object_name //显示表结构,或者显示视图结构
8. spool d:\fcs.txt //将要执行的命令保存到d盘下fcs.txt中,该路径要包括文件名,扩展名。
9. spool off // 将执行过的命令保存到8中的路径文件下。,执行这条语句后就会在相应文件中查看刚刚执行过的命令和执行过程。
10.
二、实战方面
1.用户和权限管理
在oracle中有系统用户和普通用户的区别,在系统用户下有很多操作是普通用户不能操作的,也就是普通用户需要经过系统用户的授权才能进行某些操作,具有部分或全部系统用户的权限。
1.CREATEUSER username IDENTIFIED BY password //创建一个名为username,密码为password的用户。
2.create profilepro1 limitfailed_login_attempts 3 password_lock_time 2 //创建概要文件,指定登陆用户只能最多输入3次密码,。
说明:当创建用户的时候,如果没有指定profile,那么oracle会把名字叫default的profile赋予给用户。
其中, failed_login_attempts:用于指定练习登陆的最多次数。
Password_lock_time:用于指定账户被锁定的天数。
3.create user aaidentified by aa profile prol. //创建属于pro1的用户
4.alter usertest1 profile prol; //修改用户的profile文件
5.授权(在sys用户下进行授权)
5.1.系统权限:
1.GRANT CREATE SESSION TO username; //此系统权限允许用户连接到数据库上
2.GRANT CREATE TABLE TO username; //赋给用户以创建表的系统权限
3.GRANT UNLIMITED TABLESPACE tousername; 此系统权限允许用户使用任意表空间。
5.2对象权限
1.GRANT SELECT ONSCOTT.EMP TO username ; //授予用户查询scott.emp的查询权限。
1. GRANT CONNECT,RESOURCE TO username; //授予用户resource权限,connect权限。
说明 :拥有resource权限的用户只可以创建实体,不可以创建数据库结构。
拥有Connect权限的用户只可以登录oracle,不可以创建实体,不可以创建数据库结构。 还有一个权限DBA权限:
DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
一般:对于普通用户授予connect,resource权限
.对于DBA管理用户授予connect,resource,dba权限。
扩展:系统权限只能由DBA用户授出,sys,system(最开始只能是这两个用户),普通用户通过授权可以具有与system相同的用户权限。
3.GRANT CREATE ANY TABLE TO username; //授予用户创建表的权限
4.GRANT SELECT ANY TABLE TO username; //授予用户查询表的权利
实验过程中出现了一些问题:
1. 关于number类型与int类型的转换:
Oracle中本来没有int类型,为了兼容别的数据库,新增加了int类型作为number类型的子集,
Int只能存储整数。Number可以存储浮点数,和整数,
Number(8,1) :存储小数位1,总长度为8的浮点数,如果小数位数不足,则用0补全。
Int 相当于number(22),存储总长度为22的整数。
Number的性能:对于大多数应用来说是最佳的选择,尤其是金融行业,因为狗精确,不过,number会带来性能的影响,因为oracle number类型是一种软件数据类型,是在爱oracle燃机本身中实现,我们不能使用固有硬件操作将两个number类型相加,这要在软件中模拟,所以性能有很大影响。
其中将varchar 转换成int类型,需要将varchar转换成number,再转换成int,不过并不是所有varchar型都能转换成int类型。
我创建一个表字段有sage ,类型number(10), 现在将其改为int类型:
这是我的操作过程:
1. 修改约束条件
现在有一个表中的字段sage 的约束性检查为 18-40之间,现在要将其改为18-40之外的数字范围。
如何修改呢,这是我的操作过程:
1. 删除表中的字段
注意这一个操作在上面的图中第一句已经实现了,这是在普通用户下的操作,但是如果是普通用户 as sys ,或者as sysdba ,则没有删除表的权限。
注意drop后面要添加column,否则可能报错
2. 创建备份表,或者复制表。
我们在实验过程中是先创建表,插入数据。但是没有在这些有数据的表上进行操作,而是重新复制一个表,在复制的表中进行操作。
可以使用如下语句创建一个新的表,带有数据:
Create table student(select * from student1) ;//其实就是将查询的结果作为创建表的开始