自学内容网 自学内容网

Oracle的一篇长笔记

关于Oracle的使用

1,关于启动

一,启动的方法(软件)

找到SQL Plus进入命令界面,这里需要保证您的OracleDBConsolercl服务正在运行,如果不在运行可能会报错,可以在开始搜索服务,在服务页面来启动,启动报错重启即可。

二,关于登录页面

和mysql不太一样,前者我们自定义了用户名,密码,这里要求我们输入:用户名,口令,主机字符串,我们依次来说。
①用户名
我们并没有设置用户名,因此登录默认的用户即可,既然是用户,那就涉及到了权限大小的问题。
1.SYS用户:超级管理员,权限最高。
2.SYSTEM用户:系统管理员,权限很高,但要注意,他并不具有创建数据库的权限。
3.普通用户(normal),如系统安装时的scott用户,默认密码是tiger。普通用户的权限是SYS用户或SYSTEM用户给的,如果没有给,那普通用户连很基本的访问权限,连接权限也没有。
②口令
即我们之前在安装时候设置的口令,相当于密码(提示:下方的操作用system的用户登录举例)当然我们必须输入且输入正确的密码,错误会报错,不输入会在命令行中要求输入口令(密码)
③主机字符串
这个由于我们是使用Oracle Plus打开的,不要填写。

三,关于权限

前面我们说到了一下默认用户的权限,sys作为权限最高的用户,我们没办法直接登录,直接登录会报28 009错误,提示连接这个用户,需要作为system或者sysoper(这个就是系统操作员),我们可以先连接system,再连接即可。
连接命令: conn sys/admin as sysdba
这里conn为connect的缩写,两种形式均可。

四,注意项

不同于符号语言,这里可以ctrl c/v但是不支持鼠标右键复制粘贴,同样也不支持方向键回滚或者自动补齐

2,基本命令

一,切换用户

前面在权限中讲过,可以在system用户中通过命令切换
conn sys/admin as sysdba
sysdba即之前报错反馈中的一个,与之同理sysoper也可以
那么这个是sys用户,我们试试连接普通用户
conn scott/tiger
由于是普通用户,我们甚至不需要加权限后缀
正常即可切换到用户,,当然,前提是没有锁定
这里/后面即密码,如果更改过需要换

二,关于用户解锁

①外部解锁
我们可以直接用符号语言命令
sqlplus sys/tiger as sysdba
用sysdba登入sys用户
alter user scott account unlock;
给scott用户解锁
这样我们再切换的时候就会提示修改口令,重复输入之后即可正常登入
②正常解锁
conn sys/admin as sysdba;
以DBA的身份登录,这里admin是密码
alter user scott account unlock;
conn scott/tiger
之后操作就一样了。
③锁定
alter user 用户名 account lock

三,查看用户

因为权限差别,我们在做事时需要确保当前用户可以这么做
show user
可以查看当前使用的用户

四,修改密码

SQL*plus忘了密码无法登陆的情况
cmd在dos符号语言下输入:
sqlplus sys/admin as sysdba
来进入sys用户进而
正常情况,要修改即直接
alter user 用户名 identified by 密码;
登录即可

五,退出

quit或者exit
(当然,直接关闭命令框会更快)

六,清屏

shift+delete ok即可
或者clear scr

3,用户

一,创建和删除用户

创建用户([]中的可以省略)
cteate user 用户名 identified by 密码 [quota 分配空间大小 on 表空间]
需要注意的是,密码不能用数字开头,空间大小mb应写成m
删除
drop user 用户名;

二,用户权限

授予权限,Oracle权限分为系统权限和对象权限
grant 系统权限1,系统权限2...to 用户1,用户2
grant 对象权限1,对象权限2...on 对象名 to 用户1,用户2
撤销授权
revoke 权限1,权限2.....from 用户1,用户2
revoke 对象权限1,对象权限2...on 对象名 from 用户1,用户2

用户权限,比如最开始我们创建了用户,需要给予登录权限
grant create session to 用户名;
用户权限,比如sys用户可以查到scott.emp,但是我们新建的显示视图错误(实则权限不够)
grant select on scott.emp to 用户名;
给与权限就可以查看了
要注意,不存在同时系统和对象同事授权

三,临时用户

role代替词相当于user
临时用户,特指不需要建表的用户,通常只赋予他们connect connect是使用oracle简单权限,这种权限只对其他用户的表有访问权限,包括select/insert/update和delete等。
拥有connect role 的用户还能够创建表、视图

四,用户操作

首先,要进行更改类的操作,该用户必须有操作空间权限,当然,我们也可以赋予权限,
grant unlimited tablespace to 用户名;
即赋予无限操作空间的权限

4,角色

一,定义

一组权利的集合,角色能为用户一次性分配一组权限,这组权限限实现分配给该角色,通常授予一类具有相同权限的用户,通常授予一类具有相同权限的用户。

二,分类

①系统预定义角色
DBA数据库管理角色,一般不给用户使用
resource数据库资源角色,在自己用户下,创建数据库对象测试用
connect数据库连接角色
②用户预定义角色
create role 角色名

三,授权

因为角色是权限的集合体,所以也支持直接授权,比如我们给了a,3个权限
然后把它们给用户b
grant a to b
这个其实就相当于权利的封装(a),然后转给b

5,表

一,创建表

和别的数据库一样,经典的:
create table (列名 类型(限长) 约束);
建表方法

二,数据类型

char()固定长度字符串
date日期
number(x,y)数字类型
除正常还有varchar2(szie),这个可存放可变长字符数据,最大长度为4000字符。
(默认值default 即为空默认,可以指定)
number类型:用于存储可能为负值或者正值的数据,number(a,b),a是精度,代表一个数字中的位数,范围1~38
b是小数点后位,范围-84~127
注意:如果定义整数,那么不需要加b,如果要求添加尺度则需要加b

三,表结构数据的复制

①结构
create table new_table_name as select* from old_table_name
由此可以看出类似查询语句,那么只复制结构加入不可达成的条件即可,比如加上
where 1=2
②数据
如果表的结构一样,那么添加即可
insert into tablename select * from old_name
结构不一样,那么只添加有的字段即可
insert into tablename (列名1,列名2...) select 列名1,列名2... from old_name
关于以上两点,如果有条件添加where筛选即可

四,修改表结构

①查看表结构
desc 表名
②添加列
alter table 表名 add 列名1 数据类型 约束,列名2 数据类型 约束...;
约束:
1,不为空 not null
2,唯一 unique
3,主键约束 primary key
注:唯一和主键的区别:
主键:所有组成主键的列都不能包含空值。
唯一性约束:如果唯一性约束由多列组成,那么部分列可以包含空值。
4,check的范围约束: check (条件)
5,外键约束 foreign key
③删除列
单独删除:
alter table 表名 drop column 列名;
删除多个:
alter table 表名 drop 列名1,列名2...;
④修改列
修改类型:
alter table 表名 modify 列名 新类型;
修改名称:
alter table 表名 rename column 原列名 to 新列名;
⑤修改表名
alter table 旧表名 rename to 新表名
⑥修改日期格式
alter session set nls_date_format='yyyy-mm-dd'
(仅在当前会话生效)

五,删除表

drop table 表名

六,伪表dual

单行单列的列表,是有oracle数据字典自动创建的,用来存放常变量的值或者表达式的值

6,增删改查

一,添加语句

insert into 表名 [(列名1,列名2...)] values (value1,value2...);
如果要对所有列进行数据插入,那么列名可以省略,仅有表名即可
如果是将其他表的部分数据进行插入,
可以参考表结构的复制-数据

二,更新(更改)语句

update 表名 set 字段名 = 更改值 where 条件
同步修改:
update 表名 set 字段名1 = (
select 需要提取的字段 from 需要提取的表 where 条件
),
字段名2 = (
select 需要提取的字段 from 需要提取的表 where 条件
) where 条件
或者:
update 表名 set (字段名1,字段名2) = (
select (需要提取的字段1,需要提取的字段2) from 需要提取的表 where 条件
) where 条件

三,删除语句

delete from 表名 where 条件;
永久删除;(物理删除)
删除表
truncate table 表名;
事务回滚
rollback

四,查询

select * from 表名 where 条件
①空值代替
nvl(表达式,代替值)
适用前提是表中数据是否为空不影响使用统计
②别名查询
关键词as,比如
select 列名 as 别名 from 表名
③去掉重复
关键词distinct
select distinct 列名 from 表名
④数据查询
拼接符
||可以拼接字符串,列等,要区别大小写的需要加上"",拼接的字符串需要加上''

7,约束

一,背景

为了保证数据完整性和一致性,在表上创建约束
约束包括:
主键约束:primary key
外键约束:foreign key
非空约束:not null
检查约束:check
唯一约束:unique
按约束的作用范围分为:列级约束和表级约束

二,格式

①在create table 语句中定义约束
constrain 约束名 约束关键字 表达式
②在alter table语句中定义约束
alter table 表名 add [constraint 约束名] 约束关键字 表达式
③删除约束
alter table 表名 drop constraint 约束名;

三,查看约束

select constraint_字段名1,constraint_字段名1 from user_constraints where table_name='表名';

四,约束定义

①主键约束
字段或字段的集合,不重复不为空,一张表只能有一个主键
格式:
constraint 约束名 primary key(列1,列2)
建表后添加:
alter table 表名
add constraint 约束名 primary key(列名1,列名2)
删除:
alter table 表名
drop constraint 约束名
②唯一约束
限制表中为主键约束列上的数据的唯一性
格式:
constraint 约束名 unique (列1,列2)
建表后添加:
alter table 表名
add constraint 约束名 unique(列名1,列名2)
删除:
alter table 表名
drop constraint 约束名
③检查约束
检查约束指定某列的可取值范围——域完整性,自定义完整性
关键字:check
格式:
check (表达式)
建表后添加:
alter table 表名
add constraint 约束名 check (表达式)
④外键约束
外键约束的作用于其他表中的列(参照列)建立连接。将参照物(父表)的主键所在列,或者具有唯一性约束的列包含在另一个表中,这些列构成子表的外键。
格式:
alter table
constraint 约束名 foreign key refereces 学生表(学号);
删除要先删除制作关联的表,然后才能删被关联的表

8,查询(细说)

一,日期型数据

字符串和日期型数据都要用单引号括起来
字符型数值是区分大小写的
日期型数值是区分日期表达形式的
默认的日期形式是DD-MON-RR

二,比较运算符

between and 两个值之间(包含)
in(list) 和多个值比较
like 模糊查询
is null 是空值
①like
使用立刻来执行字符串的通配符查找
查找条件可以包含字符串和数字
%表示0或更多的字符
_代表一个字符
%代表部分匹配,即多个字符或者没有都可以
escape通配符,即代表后面的字符是原意比如a_b,第一个字符是a,第三个是b,应该写为:‘a\_b’ escape "\"
符号重要,注意escape后面的字符和前面的通配符一样即可。
②between
between a and b表示一个范围,这个范围是包含临界值的
③in
in的范围查询,where 列名 in (1,2,3)
则查询的是符合列名=1 or 列名=2 or 列名=3
④is null
即查询是否为空

三,连接运算符

and连接运算符,全真则为真,有假则为假
or 有真则真,全假则假

四,not运算符

not in (范围),也可以用<>表示不等于

元素符号优先级

1=(赋值运算)、:=
2II、OR
3XOR
4&&、AND
5NOT
6BETWEEN、CASE、WHEN、THEN、ELSE
7=(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN
8|
9&
10<<、>>
11-(减号)、+
12*、/、%
13^
14-(负号)、〜(位反转)
15!
可用()改变优先级

五,排序

①升序
order by 列名 (asc)
asc可以省略,因为是默认值
②降序
order by 列名 desc
不可省略关键字

六,as关键词别名

列名 as 别名
别名不能参加运算

七,分组查询

八,函数

①统计函数
avg() 平均值
sum() 求和
count()计数函数
max()最大值
min()最小值
②排序分组
group by 分组条件 having 条件(列)
③常见字符串函数
字符串连接 count('a','b')
长度计算 length('a')
小写转换 lower('a')
大写转换 upper('a')
首字母大写 initcap('a')
查询字符a并替换 instr('字符串','a')
查询并删掉 ltrim('ssms','s')删掉左边的
 rtrim('ssms','s')删掉右边的
 trim ('s' from 'smass')全删
substr('smass',2,4) 截取删除,从第三个开始截取到第四个
④常见计算串函数
abs(x) x的绝对值
ceil(x) 大于约x的最小整数
floor(x) 小于x的最大整数
sqrt(x) 开方
round(x,n) 将x四舍五入到小数点后n位
trunc(x,n) 将x截取到小数点后n位
mod(a,b) 取余
⑤常见日期函数
last_day(sysdate) 查询该月的最后一天
next_day(sysdate, '星期五')当前日期下,下一个星期五的时间
months_between(sysdate,'日期') 相差时间
extract (year from sysdate)截取该日期年的部分
extract (month from sysdate)截取该日期月的部分
extract (day from sysdate)截取该日期日的部分

9,格式

一,格式输出

①to_char
to_char('日期',)
select to_char(列名,格式) from 表名;
举例:

select to_char(sysdate,'yyyy-mm-dd') from dual;
//将系统日期按照4位的年、2位的月和2位的格式输出
②to_data
select to_date('字符串','日期格式') from dual;
举例:

select to_date('20220408','yyyymmdd') from dual;
//将指定字符按照日期格式输出
③to_number
select to_number('字符串') from dual;
举例:

select to_number('123.45') from dual;
//将指定字符按照数值格式输出

10,代码编辑

一,指定列宽,显示页数

set linesize 100 
//列宽100
set pagesize 30
//一页30条

二,保存(生成文件)

当查询语句查询成功并拥有结果后,可以进行保存修改操作

举例:
save c:\a\a1.sql;
//将代码以a1.sql命名保存到c盘a文件夹下
save c:\a\a1.sql append ;
//将当前代码追加保存到c盘a文件夹下a1.sql文件中
save c:\a\a1.sql replace ;
//用当前代码替换原c盘a文件夹下a1.sql文件中内容

三,edit编辑

代码运行不论结果均可edit修改
同时也支持调用已经保存的查询。
比如:

edit c:\a\a1.sql;
//编辑指定盘符下的指定文件
start c:\a\a1.sql;
//运行指定盘符下的指定文件

原文地址:https://blog.csdn.net/qq_55332182/article/details/140355276

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!