快速掌握Oracle基本语法,让你来去自如

北城余情 提交于 2020-08-07 07:05:40

这篇,  让我们来继续上篇安装成功后, 讲解Oralce基本语法,让你可以操作掌握SQL语句,话不多说,上货!!!!!!

 

在说Oracle语法之前, 让我们了解一下 ↓↓↓↓↓↓↓↓↓

一. Oracle和mysql的区别:

  • MySQL:用户名--> 数据库 --> 表

 

 

  • Oracle:数据库--> 用户名 --> 表

 

 

二. 数据库操作

1. 概述

  • Oracle表与用户关联

  • 每一个用户,需要确定表存放位置,此位置称为 表空间。

  • 在Oracle中表空间分2种:永久表空间、临时表空间

    • 临时表空间:使用SQL语句操作时,结果先进入临时表空间

    • 永久表空间:当执行commit(提交)时,数据将从临时表空间永久表空间

 

2.  创建表空间(永久)

基本语法 create tablespace 表空间名称
datafile '表空间保存位置'
size 用于设置表空间的初始大小
autoextend on;            用于设置自动增长,如果存储量超过初始大小,则开始自动扩容

实例:

create tablespace test1
datafile 'G:JAVAtoolsoraclespacetest1.dbf'
size 10m
autoextend on;   --空间大小自动增强

 

3.创建临时表空间

语法

  • 注意与创建表空间有2处不一样 temporarytempfile

-- 创建临时表空间
create temporary tablespace 临时表空间名称
tempfile '临时表空间位置'
size 10m
autoextend on;

 

实例

--创建临时表空间
create temporary tablespace test1temp
tempfile 'G:JAVAtoolsoraclespacetesttemp.dbf'
size 10m
autoextend on;

 

4. 创建用户

语法

-- 创建用户
create user 用户名
identified by 密码
default tablespace 表空间
temporary tablespace 临时表空间
quota 大小 on 表空间;        --当前用于在指定的表空间的限额大小

 

实例

create user czxy1   --用户名
identified  by czxy1  --密码
default tablespace test1  --表空间
temporary tablespace test1temp   --临时表空间
quota 50m on test1;  --当前用于在指定的表空间的限额大小

 

然后可用该账号密码进行登录

 

但是,可能会出现一个小问题, 无法进行登录,

使用czxy1 通过PL/SQL 无法进行登录,提示没有权限 .如下图

 

这时候别慌, 煌sir早就给你准备好了 

赋予用户所有权限(管理员权限 dba)
-- grant dba to 用户名;
grant dba to czxy002;

运行该SQL语句即可提高权限,即可登录

成功显示:

 

 

5.  用户赋权(了解)

 

 

 

grant create session to czxy1;

 

 

 

grant select on hr.employees to czxy001;

 

 

 

6. 用户角色RBAC(了解)

 

 

 

 

 

 

 

 

 

grant dba to czxy1;

这个就是给用户赋予DBA权限后即可登陆

 

 

7. 表的操作

(1)创建表

语法1:创建一个新表

create table 表名(
    字段名   类型   [约束],
    字段名2  类型   [约束],
);

如:

create table book (
bid int primary key,
title varchar2(50)
);

 

语法2:拷贝一个表(结构 + 数据)

create table 表名 as 查询语句;

如:

select * from hr.employees;
create table emp as select * from hr.employees;

 

分类:

 

 

实例:

create table student(
  stuid int,
  stuname varchar2(20),
  sex char(1),
  age number(3,0),
  birthday date,
  email varchar2(20),
  phone char(11)
);

 

 

(2) 修改表(了解)

alter table 表名 具体操作  数据;
-- 添加
alter table 表名 add (列描述,....);
-- 修改
alter table 表名 modify (列描述,....);
-- 删除列
alter table 表名 drop column 列名;

实例:

--1.增加字段
alter table  student add(
remark varchar2(20),
order_no int
)



--2.修改字段
alter table student modify(
 remark nvarchar2(50),
 order_no varchar2(50)
);


--删除字段
alter table student drop column order_no;

 

 

 

(3) 删除表

drop table 表名

实例:

--删除表
drop table student2;

 

 

常见约束

 

 

(1) 主键约束

添加约束

-- 主键约束0
-- 方式1:创建表,声明字段时,添加约束 (只能指定一个字段为主键)
create table pk01(
  pid int primary key,
  name varchar2(20)
);
-- 方式2:创建表,声明字段后,添加约束 (可以设置联合主键)【推荐】
create table pk02(
  pid int,
  name varchar2(20),
  constraint pk02_pid primary key (pid)
);
-- 方式3:创建后,修改表结构,添加约束 【推荐】
create table pk03(
  pid int,
  name varchar2(20)
);
alter table pk03 add constraint pk03_pid primary key (pid);

 

删除约束

-- 删除主键
alter table pk03 drop primary key;

 

(2)主键验证

insert into pk01(pid,name) values(1,'jack');  -- 不允许重复执行
insert into pk01(name) values('jack');        -- 不允许为null
commit;

 

 

(3)唯一、非空、默认

### 2.3.4 唯一、非空、默认

* 唯一约束 ,添加约束方式与`主键约束`一致,也就是可以采用3种方式

  ~~~sql
  -- 唯一约束 (第三种)
  create table un01(
    pid int,
    name varchar2(20)
  );
  alter table un01 add constraint un01_name unique(name);

 

唯一验证

insert into un01(pid,name) values(1,'jack');  -- 不允许重复执行
insert into un01(name) values('rose');        -- 可以执行
commit;

 

 

(4) 非空约束:

-- 非空约束
create table nn01(
  pid int,
  name varchar2(20) not null 
);

 

非空验证

insert into nn01(pid,name) values(1,'jack');  -- 允许重复录入
insert into nn01(pid) values(2);                --不允许为null
commit;

 

 

(5)默认约束:

-- 默认约束
create table de01(
  pid int,
  name varchar2(20) default('游客')
);

 

默认验证

insert into de01(pid) values(2);       -- 只录入id,name默认游客
commit;

 

 

(6) 检查约束

-- 检查校验
create table ch01(
  pid int,
  sex char(10) check( sex in ('男','女') ),
  age int check( age >=0 and age <=100 )
);

 

 

检查校验

insert into ch01(pid,sex,age) values(1,'男',18); -- 可以录入
insert into ch01(pid,sex,age) values(2,'妖',18); -- 不允许
commit;

 

(7)外键约束

语法:

--  alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);
 

实例:

Alter table stuinfo add constraint fk_stuno foreign key(stuno) references student(stuno);

联合主键

  • 联合主键:2个以上字段,组合在一起为主键,称为联合主键。

  • 应用场景:多对多关系中间表

 

drop table student_course;
create table student_course(
  sid varchar2(20) ,
  cid varchar2(20) ,
  score number(4,1)
);
alter table student_course add constraint student_course_pk primary key (sid,cid);

insert into student_course(sid,cid,score) values('s001','c001',100); --不允许重复
commit;

 

 

 

三. DML (增删改)

DML :数据操作语言,完成数据增删改操作

 

1. 添加

-- 完整用法
insert into 表名(字段1,字段2,...) values(值1,值2,...)
-- 省略用法:值顺序必须与表中的列顺序对应
insert into 表名 values(值1,值2,...)

实例: 

--插入数据
--方式一
insert into student(sid,sname,phone)values(1,'tom','123');

--方式二
insert into student values(2,'aa',null,20,null,null,'111111');

insert into student values(2,'bb','男',18,null,'123@com','22222')

 

 

2. 修改

-- 语法1:更新表中的所有数据
update 表名 set 字段1=值1,字段2=值2,...
-- 语法2:更新指定数据(条件)
update 表名 set 字段1=值1,字段2=值2,... where 条件

实例:

--修改数据 ------------

update student set phone='123321' where sid=1;

 

3. 删除

-- 语法1:删除所有
delete from 表名;

-- 语法2:删除指定数据(条件)
delete from 表名 where 条件;

-- 语法3:
truncate table 表名;

实例:

--删除
--语法1 delete支持回滚
--删除数据
delete from student where sid=1;

--删除所有
delete from student;


--语法3;删除表结构,重新创建
truncate table student2;

delete 和 truncate 区别:

  • delete 删除表中的数据,支持回滚。

  • truncate 删除表结构,重新创建。

 

 

 

今篇到这里就结束,但在结束前还有一点要注意的就是关于数据库操作的一些情况

在PL/SQL执行 DML(增删改)时,查询不到数据。

,可以在以下三种情况下说明:

Oracle中 新增一条数据:其实就是向临时表空间中新增

临时表空间的数据何时提交到表空间中呢?

答:三种情况:

  1. Commit
  2. 过半个小时左右,自动提交
  3. 关闭plsql开发工具
    • Oracle事务,自动提交默认关闭的。所以需要手动提交

 

 

我们下篇继续噢!!!期待!!

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!