这篇, 让我们来继续上篇安装成功后, 讲解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:\JAVA\tools\oracle\space\test1.dbf'
size 10m
autoextend on; --空间大小自动增强
3.创建临时表空间
语法
注意与创建表空间有2处不一样temporary和tempfile
-- 创建临时表空间
create temporary tablespace 临时表空间名称
tempfile '临时表空间位置'
size 10m
autoextend on;
实例
--创建临时表空间
create temporary tablespace test1temp
tempfile 'G:\JAVA\tools\oracle\space\testtemp.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 toczxy1;
grant select onhr.employeesto czxy001;
6. 用户角色RBAC(了解)
grant dba toczxy1;
这个就是给用户赋予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中 新增一条数据:其实就是向临时表空间中新增
临时表空间的数据何时提交到表空间中呢?
答:三种情况:
Commit
过半个小时左右,自动提交
关闭plsql开发工具
Oracle事务,自动提交默认关闭的。所以需要手动提交
我们下篇继续噢!!!期待!!
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 !加油 ,陌生人一起努力,共勉!!