oracle数据库笔记之基础部分

创建用户

CREATE USER 用户名 IDENTIFIED BY 用户密码

[DEFAULT TABLESPACE default_tablespace]--作用是用户的默认表空间

[TEMPORARY TABLESPACE temporary_tablespace];--作用是临时用户默认的表空间

create user identified by 123;

删除用户

drop user 用户名 [cascade --作用是级联删除即删除用户的对象(表。。),但注意删除是这些对象没有被其它用户访问]

给用户授权(用管理员的身份)

grant 权限 to 用户

权限的分类有:create session --分配连接权限

creat sqquence --创建序列权限

creat synonym   --创建同义词的权限,需要注意grant creat synonym to 用户名(包含drop synonym权限)

但是grant creat public synonym to 用户名 (不包含drop public synonym权限需要另外分配)

create table    --创建表的权限

drop table      --删除表的权限

drop any table  --删除任一表的权限

create procedure  --创建存储过程

create user     --创建用户

drop user       --删除用户

create view     --创建用户

给对象授权

grant 权限 on 表名 to 用户名

对象权限的分类:

对象权限                            允许用户操作

insert                              执行插入语句

select                              执行查询语句

update                              执行更新语句

delete                              执行删除语句

execute                             执行存储过程

撤销用户权限

revoke 权限 from 用户

修改用户

修改用户密码:alter user 用户名 identified by 新密码

connect[conn] 用户名/旧密码

password;         --利用管理员的身份为某用户修改密码此方法会显示出一个可视化窗口进行修改,需要注意此代码格式必须是这样否则执行出错。

conn[connect] 用户名/旧密码

password;        --用户自己身份进行修改,其他同上

给用户解锁:

alter user 用户名 account unlock;

查询用户

SELECT username,user_id,password,default_tablespace

FROM dba_users;

数据类型

数据类型是在创建表的时候定义的:

字符型的:


数据类型


最大长度


说明


CHAR(size)


2000


固定长度字符串,size表示存储的字符数量


NCHAR(size)


2000


固定长度的NLS(National Language Support)字符串,size表示存储的字符数量

经过试验最大值为1000。


NVARCHAR2(size)


4000


可变长度的NLS字符串,size表示存储的字符数量. National Language Support (NLS)


VARCHAR2(size)


4000


可变长度字符串,size表示存储的字符数量


RAW(Size)


2000


可变长度二进制字符串,建议使用blob。

注意:char(4) --仅可以存储两个汉字

nchar(4) --可以存储四个汉字

数值型的


数据类型


说明


NUMBER(p,s)


包含小数位的数值类型。参数p表示精度,参数s刻度,它表示小数点后面的位数。例如:NUMBER(10,2)表示小数点之前最多可以有8位数字,小数点后有2位数字


NUMERIC(p,s)


与NUMBER(p,s)相同


FLOAT


浮点数类型。属于近似数据类型,它并不存储为多数数字指定的精确值,它们只存储这些值的最近似值


DEC(p,s)


与NUMBER(p,s)相同


DECIMAL(p,s)


与NUMBER(p,s)相同


INTEGER


整数类型


INT


同INTEGER


SMALLINT


短整类型


REAL


实数类型,与FLOAT一样,属于近似数据类型


DOUBLE PRECISION


双精度类型

日期/时间类型


数据类型


说明


DATE


日期类型


TIMESTAMP


与DATE数据类型相比,TIMESTAMP类型可以精确到微秒,微秒的精确范围为0-9,默认为6


TIMESTAMP WITH TIME ZONE


带时区偏移量的TIMESTAMP数据类型


TIMESTAMP WITH LOCAL TIME ZONE


带时区偏移量的TIMESTAMP数据类型


INTERVAL YEAR TO MONTH


使用YEAR和MONTH日期时间字段存储一个时间段。年份精度指定表示年份的数字的位数。默认为2


INTERVAL DAY TO SECOND


用于按照日、小时、分钟和秒来存储一个时段。日精度表示DAY字段的位数,默认为2;微秒的精度范围为0-9,默认为6

大对象类型


数据类型


说明


BFILE


指向服务器文件系统上的二进制文件的文件定位器,该二进制文件保存在数据库之外


BLOB


保存非结构化的二进制大对象数据,最大值为4G。


CLOB


保存单字节或多字节字符数据,最大值为4G.


NCLOB


保存Unicode编码字符数据,最大值为4G。

sql语句类型:

DDL(data definition language)数据定义语言:用于创建对象的

create  drop   alter  modify  rename

DML(data manipulation language)数据操作语言:用于操作数据

insert..into    updata   delete select

创建表

(1)创建表必须具备create table权限

(2)创建表及命名规则:表名和列名:

必须以字母开头

必须在 1–30 个字符之间

必须只能包含 A–Z, a–z, 0–9, _, $, 和 #

必须不能和用户定义的其他对象重名

必须不能是Oracle 的保留字

Oracle默认存储是都存为大写

(3)创建语法:

CREATE  [GLOBAL TEMPORARY--意思是是否是临时表] TABLE 表名 (

列名 列属性 [CONSTRAINT 约束名 DEFAULT 列的默认值]

[, 列名 列的属性[CONSTRAINT 约束名 DEFAULT 列的默认值] ...]

)

[ON COMMIT {DELETE | PRESERVE} ROWS]--控制临时表保存的时间

[TABLESPACE 表空间;]

--注意最后一列没有‘,‘号创建完表之后可以使用desc 表名来查询表的结构

(4)对表的操作:

给表添加约束:alter table 表名 add constraint 约束名  约束条件(有primary key 列名|check(列名 约束条件)|unique (列名)|

主外键名 foreign key (列名) references 要引用的表名(列名))

删除表的约束:alter table 表名 drop constraint 约束名

停用约束:alter table 表名 disable constraint 约束名

启用约束:alter table 表名 enable  constraint 约束名

查看表的约束:select * from user_constraints;

查看表的信息:select * from user_tables

表的重命名:rename 旧表名 to 新表名

查看表中列的信息:select * from user_tables_columns

往表中添加新的一列:alter table 表名 add 列名 列属性

给列重命名:alter talbe 表名 rename column 旧列名 to 新列名

给列起别名:select stuname as "别名" from student where 条件;(双引号可有可无)

给列(表)添加备注:comment on column 列名(表名) is ‘备注信息’

修改表中列的属性:alter table 表名 modify 列名 列属性

删除表中的一列:alter table 表名 drop column 列名

(5)对表中数据的操作:

向表中插入数据:♣insert into 表名[列名,列名,..列名] values(与前面列名相对应的值)

注意:所给列的值必须和前面所陈列的顺序一致

当时日期类型是:insert into 表名 values(to_date(‘2009-02-03‘,‘yyyy‘));

或者insert into 表名 values(‘09-3月-2015‘);

♣insert into 目标表名 select 要插入目标表的列 from 要从哪个表中选数据的表名;

例如:从books1表中查出所有数据插入到books中去

insert into books select * from books1;

♣create table 表名 as select 要插入的列 from 要从哪个表中选数据的表名;

例如:create table books as select * from books1;

注意:第二种和第三种插入方法类似,区别在于第二种方法中books表必须存在而第三种办法是books表可以没有。另外,如果第三种

办法有where条件并且where条件为1=2这种永远为假的条件的话,那么此操作仅仅会复制表books1的结构不会插入任何数据。

更新表中数据:updata 表名 set 列名=列值,列名=列值 where 条件;(多组条件之间用and 表示与 or 表示或)

删除表中数据:delete [from] 表名 where 条件

truncate table 表名

注意:两者区别是delete是可以回退的删除前提是在没有commit之前,而truncate是不可以回退的不管是否commit;

查询表中数据:

♠单表的查询:select 列名 from [distinct] 表名 --加distinct的作用是取消重复列

[where 列名=列值]

[group by 要进行分组的列名]

[having 分组后的查询条件]

[order by 要排序的列  asc(升序)|desc(降序)];

注意:带[]的可以有可以没有,但要是多个存在是顺序必须是这样的。不能颠倒。

数据库中运算符的分类:

(1)算术运算符:+    -     *     /

注意:+不能做连接符使用,仅仅能用于数字类型的计算

oracle中字符类型的区分大小写例如:smith就不等于Smith

数字类型的直接用=比较,而字符和日期类型的要用单引号括起来在比较

oracle中日期格式是日—月—年要修改可以用语句:alter session set nls_date_format=‘yyyy-mm-dd‘;

补充:如何获取系统的年,月,日

select to_char(sysdate,‘yyyy‘) from dual;--获取年

select to_char(sysdate,‘MM‘) from dual;  --获取月

select to_char(sysdate,‘dd‘) from dual;  --获取日(是当月的第几天,而ddd表示当年的第几天,dy表示当周的第几天)

select to_char(sysdate,‘hh‘) from dual;  --获取12进制的小时(其中hh24是24进制的小时)

select to_char(sysdate,‘mi‘) from dual;  --获取2位数的秒数(60进制)

select to_char(sysdate,‘Q‘) from dual;   --获取季节

select to_char(sysdate,‘iw‘) from dual;  --获取当年第几周,一般一年是52周或者53周(其中ww也可以表示,而w则表示当月第几周)

时间的计算:

select sysdate-interval ‘7‘ hour from dual;  --当前系统时间减去7个小时。也可以用+表示加上7个小时

select sysdate-interval ‘7‘ minute from dual; --减去7分钟

select sysdate-interval ‘7‘ day from dual;   --减去7天

select sysdate-interval ‘7‘ month from dual; --减去7个月

select sysdate-interval ‘7‘ year from dual; --减去7年

或者:select to_date(‘2015-06-23‘,‘yyyy-mm-dd‘)+7 from dual;--你输入的时间加上7天

select to_date(‘2015-06‘,‘yyyy-mm‘)+7 from dual;  --你输入的时间默认为2015年6月的1号在加上7天

select to_date(‘2015‘,‘yyyy‘)+7  from dual;  --你输入的时间默认是2015年1月1号再让月加上7日加上7

(2)比较运算符

=    !或者<>     <      >      <=       >=

any(表示任一)   all(表示全部)   注意:这两个必须和上面比较运算符一起使用

in(值1,值2,...值n)匹配值中的任何一个

between 下限 and 上限 (包含上下限)

exists 表示是否存在

例子:select stuname from student where stuno>any(01,05,06);表示查询学号大于01,05,06中的任何一个(即大于最小的即可)的学生姓名

(3)sql运算符

like  和_ 或者%一起使用

例子:select * from emp where ename like ‘s%‘;

(5)逻辑运算符

and    or    not

数据库中的函数:

(1)单行函数:

concat(a,b)      --字符串拼接函数,也可已使用||来代替。例如:select concat(bookid,‘-‘) 或者是select bookid||‘-‘ from 表名

Initcap(x)       --将字符串转换成每个首字母大写其他字母小写的形式

Instar(要从哪个字符串中找,要查找的字符,开始的位置,第几个出现)

例如:select ename Instr(ename,‘l‘,1,2) from emp where empno=7499;  --查找从第一个字母开始找第二个出现‘l‘的位置,并返

回位置数字

length(x)       --返回x长度

nvl(x,value)   --若x为null则返回value值

replace(x,要被替换的字符串,替换成的字符串)例子:select ename replace(ename,‘SMITH‘,‘史密斯‘) as 新名字  from emp

where emp=‘7369‘;将SMITH替换成史密斯

substr(x,开始的位置[,长度]) 提取指定的字符,若开始位置为负数则从x的最后一个字符开始算,若长度没有长度,则返回从开始位置

到最后一个字符之间的所有字符。例子:select ename,substr(ename,2,3) from emp;

lower(列名|字符串)   --将字符串的所有字母转换成小写

upper(列名|字符串)  --将字符串的所有字符装换成大写

LPAD(x,width[,要填充的字符])  --左填充

RPAD(x,width[,要填充的字符])  --右填充

ltrime(x,[,要去出的字符])     --左去除

rtrim(x,[,要去除的字符])      --右去除

trim(x,[,要去除的字符])      --两边去除

soundex(x)                    --返回代表x的字符串的语音表达形式例子:select ename from emp

where soundex(ename)=soundex(‘smith‘);

(2)数字函数

ceil(value)   --返回最接近值的最小整数

floor(value)  --返回最接近值的最大整数

trunc(value[,n]) --硬截取,若n大于0则保留n为小数,若n小于0则保留-n为小数,n等于0或者没有则去掉小数部分

round(value,n)   --同上,不过是四舍五入的截取

abs(value)     --返回绝对值

power(value,n) --n次幂

mod(m,n)       --m对n取余的结果

sqrt(value)    --开方

(3)转换函数

to_char(x[,format])  --将x转换成什么格式的字符串

to_number(x)         --将x转换成数值型

to_date(x[,format])  --将x转换成什么格式的日期型

(4)聚集函数

avg(x)          --返回平均值

count(x)        --返回同及x出现的系数,会自动排除空值

max(x)          --返回最大值

min(x)          --返回最小值

sum(x)          --求和

median(x)      --返回中间值

stddev(x)      --返回标准偏差

variance(x)    --返回方差

♣高级查询(又称多表查询)

内部链接:select ename,dname from emp e,dept d where e.deptno=d.deptno;

(1)内连接(inner join)例子:

select ename,dname from emp e inner join dept d using(deptno);

select ename,dname from emp e inner join dept d on e.deptno=e.deptno;

(2)左连接(left join)例子:

select e.ename,d.dname from emp e left join dept d on d.deptno=e.deptno   --以emp表为主即以左表为主

select e.ename,d.dname from emp e,dept d where e.dtptno=d.deptno(+)       --加号不在那个表那,那个表示主表

(3)右连接(right join)例子:

select e.ename,d.dname from emp e right join dept d on d.deptno=e.deptno   --以dept表为主即以右表为主

select e.ename,d.dname from emp e,dept d where e.dtptno(+)=d.deptno       --加号不在那个表那,那个表示主表

(4)全连接(full join)例子:

select e.ename,d.dname from emp e full join dept d on d.deptno=e.deptno    --左右表均为主表

子查询:select * from emp where deptno=(

select deptno from emp where ename=‘smith‘;

)注意:若返回数据是多行则会出错,另外,order by 只能用于父查询

多行子查询:select deptno,sal from emp where (deptno,sal)

in(select deptno,min(sal) from emp group bu deptno;);

合并子查询:union   --取两个结果集的并集,并自动去掉重复行

union all --取两个结果的并集,不会去重复也不会排序

interset  --取交集

minus     --取差集,只显示存在第一个集合中的,不显示第二个集合中的

例子:select ename,sal,job from emp where sal>2500

union

select ename,sal,job from emp where job=‘manager‘;

分页查询:rownum 结果集编号

select * from(

select rownum m,empno,ename,job from emp where rownum<10

) temp where temp.m>5;

除此之外,rowid是行标识符,oracle中每一行都有一个唯一的标示符,它用户oracle数据库内部存储的物理位置

delete from temp where rowid not in(

select min(rowid) from temp group by id

);

序列(sequence):是数据库对象用于生成一系列的整数

(1)创建序列:create sequence 序列名称

[start with 起始值]

[increment by 步长]

[maxvalue 最大值|nomaxvalue]

[minvalue 最小值|nominvalue]  --默认是1

[cycle|nocycle]               --默认是nocycle

[cache|nocache]               --默认是nocache

[order|noorder]               --请求顺序是否按生成顺序得到

例子:create sequence s

start with 10

increment by 5

minvalue 10

maxvalue 20

cycle cache 2

order;

(2)删除序列:drop sequence s;

(3)查看序列:select s.nextval from dual;

select s.currval from dual;

索引:

(1)B树索引:默认的索引类型,平衡数索引适用于高基数,重复值少时使用

create [unique] index 索引名 on

表名(列名[,列名...])

tablespace 索引空间

例子:create index i on customer (last_name);

(2)唯一索引:B树索引的一种形式,经常与主键和唯一键约束一起使用。

(3)位图索引:对于包含低基序列以及在sql语句的where字句中使用,使用许多and 或者or运算符的数据仓库,重复值的使用

create bitmap index 索引名 on 表名(列名)

(4)函数索引:使用与应用了sql函数的列

create index 索引名 on 表名(upper(列名))

视图:基于已知的一张或多张表的查询操作,存储在数据库中的一条sql语句

视图并不是存储数据,数据依然被存在原始表中,

注意: 如果视图只关联了一张表,则可基于它进行增,删,改,查操作对原表产生影响

创建视图:create [or replace] [force|noforce] view 视图名

[列名[,列名...]] as subquery 子查询

[with [check option|read only] constraint 约束名];

注意:创建视图必须具备相应的权限:grant create view to 用户名

删除视图:drop view 视图名

同义词:

create sysnonym 同义词名 for 相应的要为谁创建同义词的名

同样要具有相应的权限:grant create sysnonym to 用户名;注意:此语句不仅分配了创建同义词的权限,还分配了删除同义词的权限

grant create public sysnonym to 用户名;--仅仅分配了创建权限

grant drop public sysnonym to 用户名;  --分配删除的权限

时间: 2024-07-30 04:07:33

oracle数据库笔记之基础部分的相关文章

Oracle数据库备份恢复基础讲解_超越OCP精通Oracle视频教程培训12

Oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习Oracle数据库备份恢复概念及基础,包括:Oracle常见的故障类型.Oracle备份的重要性及备份策略.Oracle如何制定合适的备份策略保证高效备份.Oracle备份分类.MTTR,MTBR,MTTF.Oracle物理备份与逻辑备份.Oracle备份恢复的工具及Oracle还原与恢复介绍. 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址: http://e

oracle数据库-表空间基础语法及举例

数据库的存储结构 数据库主要用于存储和检索相关的信息,Oracle数据库包含逻辑结构和物理结构. 物理结构是指现实存储单元,由一组文件组成如数据文件.日志文件.控制文件. 数据文件:用于存储数据的文件.如表,索引和数据等都存储在数据文件中. 日志文件:用于记录对数据库的修改信息. 控制文件:用于存储 Oracle实例信息.数据文件信息和日志文件信息的二进制文件.由于存储了数据文件和日志文件的信息,所以 Oracle启动时必须访问呢控制文件. 逻辑结构式是指数据概念性的组织.包括  表空间.表.行

ORACLE数据库笔记之PL/SQL

PL/SQL PL/SQL是一种块结构的语言,它是将一组语句放在一个块中,一次性发送给服务器.它是结合Oracle过程语言和结构化查询语言的一种扩展语言 PL/SQL代码块的构成 declare --标记声明部分用来声明一些变量,位于begin之前 begin  --主程序体开始的标志 主程序体块: [exception when 异常名 then 异常处理的方法; when 异常名  then 异常处理的方法; ... when other then 异常处理的方法;] end;  --主程序

Oracle数据库之SQL基础

主要内容:用户与表空间:表与约束:查询语句. 一.概述 Oracle安装:访问官网,下载 二.用户与表空间 在安装Oracle时在开始菜单里可以用sql puls登录oracle. 1.系统用户 sys.system (sys的权限要大于system,sys只能以系统管理员sysdba登录,system可以直接登录) sysman (用于企业管理,也是管理员级别的用户) scott (密码默认密码为tiger) 在安装Oracle时,前三个用户的密码是由你自己设置的,在设置时一般设置的是统一的密

Oracle数据库之SQL基础(二)

一.约束 ? 1.约束概述 约束作用: (1)定义规则 (2)确保完整性:包括数据的精确性.可靠性.以确保数据不会出错,或者尽量减少出错. 约束的类型: (1)非空约束 (2)主键约束 (3)外键约束(右外键约束)(左外键约束) (4)唯一约束 (5)检查约束 ? 2.非空约束 (1)在创建表时设置非空约束 语法:CREATE TABLE table_name(column_name datatype NOT NULL,...);(2)在修改表时添加非空约束 语法:ALTER TABLE tab

Oracle数据库之SQL基础和分支循环

一.SQL基础语言 DECLARE --声明 a varchar2(10); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbms_output.put_line() END; 二.分支 DECLARE --声明 A NUMBER(10); B NUMBER(10); BEGIN A := 2; B := 3; IF A < B THEN DBMS_OUTPUT.PUT_LINE('a小于b'); EL

ORACLE数据库笔记之事务处理和触发器

事务的特点(ACID) A(atomacity)原子性:事务是一个整体,组成事务的处理语句形成一个逻辑单元,不能只执行其中的一部分. C(consistency)一致性:事务执行前后数据库是一致的(数据库的完整约束) I(isolation)隔离性:一个事务的处理不会影响另一个事务的处理,相互之间是隔离的 D(durability)持久性:事务处理的效果可以被永久性保存下来 注意:一个事务要吗成功要吗失败不会一部分成功一部分失败的 事务的结束 (1)显示结束:执行了commit或者rollbac

Oracle数据库—— PL/SQL基础编程

一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs),密码为: t_你的学号后三位(例如:t_165).并授予新用户连接数据库的权限,然后以新用户连接数据库. 1. 创建用户u_sxl 2. 授予新用户u_sxl连接数据库的权限 3. 以新用户u_sxl连接数据库 (二)使用scott用户连接数据库,使用SQL语句创建表dep_你的学号后三位(例如:

Oracle数据库开发SQL基础之约束

约束的作用:定义规则.确保完整性 一.非空约束 1.在创建表时设置非空约束 CREATE TABLE userinfo_1 (id number(6,0), username varchar2(20) not null, userpwd varchar2(20) not null )   2.在修改表时设置非空约束 DELETE FROM userinfo ALTER TABLE userinfo MODIFY username varchar2(20)not null 3.去除非空约束 ALT