Oracle学习

本文详细介绍了Oracle数据库的管理,包括表空间、用户和表的创建与管理,深入探讨了数据类型、查询函数、多表查询、PL/SQL编程语言、触发器等内容,适合数据库管理员和开发者学习。
摘要由CSDN通过智能技术生成

Oracle学习

补充:(查询IP地址)

查询IP地址:win+R,调出窗口,输入cmd,接着输入ipconfig

一、表空间、用户和表

1、表空间

(1)创建表空间
create tablespace MM

datafile 'E:\shujuku\tablespace\MM.dbf'

size 100m

autoextend on

next 10m;
(2)删除表空间
drop tablespace MM;

2、用户

(1)创建用户
create user MM

identified by MM

default tablespace MM;
(2)给用户授权
grant dba to MM;

connect:基本角色;resource:开发者角色;dba:超级管理员角色。

(3)切换用户

session-----------log off,log on

补充内容:数据类型

在这里插入图片描述

(1)varchar2和char区别:

varchar2是可变长度,char是定长

(2)varchar和varchar2区别:

目前没有区别,但官方文档不支持使用varchar,强烈建议使用varchar2。

  • varchar2是oracle提供的独特的数据类型,oracle保证在任何版本中该数据类型向上和向下兼容。但不保证varchar,这是因为varchar是标准sql提供的数据类型,有可能随着sql标准的变化而改变。
  • 如果数据库不移植的话,就没有区别。如果数据要移植到别的数据库,可能用varchar比较好。varchar2很多数据库不支持。
  • varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节。
  • varchar2把空串等同于null处理,而varchar仍按照空串处理。
  • varchar2字符要用几个字节存储,要看数据库使用使用的字符集,比如GBK,汉字就会占两个字节,英文1个,如果是UTF-8,汉字一般占3个字节,英文还是1个。

3、表

(1)创建表
Create table person(

       pid number(20),
       
       pname varchar2(10)
       
);

可以直接在创建语句后面追加“tablespace name”进行表空间指定。

sql: create table tablename(id int) tablespace tablespacename;

解释:在表空间“tablespacename”上创建表“tablename”。以上语句就实现了为表指定表空间。

(2)修改表结构
1)列操作
  • 添加一列
alter table person add (gender number(1));

注意:()里面可以写很多列,用“,”隔开。

  • 修改列类型
alter table person modify gender char(1);
  • 修改列名称
alter table person rename column gender to sex;
  • 删除一列
alter table person drop column sex;
2)记录操作
  • 添加一条记录
insert into person (pid,pname) values (1,'小明');

commit;

注意1:如果添加的数据占据了所有列,那person后面的()中可以不写内容。

注意2:增删改一定要写commit提交事务;查询不涉及事务。

  • 修改一条记录
update person set pname='小马' where pid = 1;

commit;
3)三种删除方式
  • 删除表中全部记录
delete from person;
  • 删除表结构
drop table person;
  • 先删除表,再次创建表,效果等同于删除表中全部记录
truncate table person;

注意1:在数据量大的情况下,尤其是在表中带有索引的情况下,第三种删除方式操作效率高;因为它是先删除索引。

注意2:索引会提高查询效率,但是会影响增删改效率;

(3)查看表

对着表格右击view,column

(4)序列

序列不真的属于任何一张表,但是可以逻辑和表做绑定。

序列的使用:默认从1开始,依次递增,主要用来给主键赋值使用。

dual:虚表,只是为了补全语法,没有任何意义(因为oracle查询必须要打上from)

create sequence s_person;

select s_person.nextval from dual;

insert into person (pid,pname) values (s_person.nextval,'小明');

commit; 

注意:用s_person.currval容易报错,因为第一次使用时,没有当前序列。

补充:(密码重置)

1、Scott用户,密码tiger

2、解锁Scott用户,解锁密码(也可以用来重置密码)

alter user scott account unlock;

alter user scott identified by tiger;	

注意:此句可以用来重置密码。

补充:(三张表)

EMP:EMPNO(员工编号),ENAME(员工姓名),JOB(员工工作),MGR(员工直属领导编号),HIRDATE(入职日期),SAL(工资),COMM(一年奖金),DEPTNO(部门编号)

DEPT:DEPTNO(部门编号),DNAME(部门名称),LOC(部门地址)

SALGRADE:GRADE(工资等级),LOSAL(最低工资),HISAL(最高工资)

注意1:DEPTNO在EMP中是外键,主键在DEPT中

注意2:右击bonus表,点击query data,表中是没有数据的

二、查询函数

1、单行函数

作用于一行,返回一个值

(1)字符函数
1)小写变大写
select upper('yes') from dual;

查询雇员姓名内容为smith的全部员工:
SELECT * FROM emp WHERE ename=UPPER('smith');
2)大写变小写
select lower('YES') from dual;
3)首字母大写函数
select initcap('hello world')from dual;

将雇员表中的全部雇员信息的首字母大写。
SELECT initcap(lower(ename)) FROM emp ;
4)字符串连接函数
select concat('hello','world') from dual;

或者:

select 'hello' || 'world' from dual;
5)字符串截取函数

截取的时候需要注意:要从哪里开始截取,之后取多长的长度。

select substr('hello',1,2) from dual;

select substr('hello',-3,2) from dual;
倒数第三个开始取两位;

检索姓名最后一个字母为N的雇员:
SELECT * FROM emp WHERE substr(ename,-1,1)='N';

检索职务为“SALE”的全部员工信息
SELECT * FROM emp WHERE substr(job,1,4)='SALE';
6)字符串替换函数
select replace('hello','l','x') from dual;
7)获取字符串长度函数
SELECT length(ename) FROM emp ;

注意:其中length()函数获取的是字符串的字符数,lengthb()获取的是字符串的字节数。但是需要注意的是如果你的数据库中的字段是clob,使用lengthb()会报错。

在oracle 中

select lengthb(‘你好’) from dual; 返回的值是 4

select length(‘你好’) from dual; 返回的值是2

8)instr()函数:查找在一个字符串中是否有指定的字符串

如果有此字符串,则返回位置;如果没有,则返回0。

select instr('hello','o') from dual;

SELECT instr('hello','x') FROM dual ;
9)trim()函数:去掉左右空格的函数
select trim(' hello ') from dual;
(2)数值函数
1)四舍五入函数
select round(26.18) from dual;
结果为26;

select round(26.18,1) from dual;
结果为26.2;

select round(26.16,-1) from dual;
结果为30;

select round(26.16,-2) from dual;
注意:此时无法向前进位了,所以结果是0;

select round(56.16,-2) from dual;
此时结果为100;
2)截取函数
select trunc(56.16) from dual;
结果为56
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值