篮之新喜 发表于 2025-10-12 12:11:23

【小白学习Oracle】理论和实践联合,一个项目带你学会Oracle底子语法

1.业务配景

在都会的住宅小区和贸易地域中,须要对业主的用水情况及费用缴纳举行有用管理。业主范例涵盖平常住民、贸易用户等差别种别(业主范例表),每种范例对应差别的水价标准(代价表)。地域表记载小区或贸易地域内分别的差别地域,方便管理和统计。
收费员表明确负责水费收取的工作职员信息,地点表精准定位业主所在位置,与地域表和收费员有所关联。业主表详细记载每位业主的底子信息、住址、水表编号等,为后续管理提供底子数据。
每次抄表时,抄表员(收费台账中的抄表员字段)会记载业主上月和本月的水表累计数,盘算出本月利用数,并依据业主范例和代价表算出应缴金额。收费台账完备记载每个业主每月的用水数据、缴费状态、缴费日期以及收费员信息等,实现对水费收缴业务的全流程跟踪与管理。
2.表布局筹划

2.1业主范例表(OWNERTYPE)

字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是范例名称2.2业主表(OWNERS)

字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是业主名称ADDRESSIDNUMBER是地点IDHOUSENUMBERVARCHAR2(30)是门牌号WATERMETERVARCHAR2(30)是水表编号ADDDATEDATE是登记日期OWNERTYPEIDNUMBER是业主范例ID2.3地域表(AREA)

字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是地域名称2.4收费员表(OPERATOR)

字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是利用员名称2.5地点表(ADDRESS)

字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是地点名称AREAIDNUMBER是地域IDOPERATORIDNUMBER是利用员ID2.6代价表(PRICE)

字段名范例(位数)是否必填分析IDNUMBER是主键PRICENUMBER(10,2)是代价OWNERTYPEIDNUMBER是业主范例IDMINNUMNUMBER(10,2)是区间数开始值MAXNUMNUMBER(10,2)是区间数制止值2.7 收费台账(ACCOUNT)

字段名范例(位数)是否必填分析IDNUMBER是主键OWNERIDNUMBER是业主编号OWNERTYPEIDNUMBER是业主范例AREAIDNUMBER是所在地域YEARCHAR(4)是账务年份MONTHCHAR(2)是账务月份NUM0NUMBER上月累计数NUM1NUMBER本月累计数USENUMNUMBER本月利用数METERUSERIDNUMBER抄表员METERDATEDATE抄表日期MONEYNUMBER(10,2)应缴金额ISFEECHAR(1)是是否缴费FEEDATEDATE缴费日期FEEUSERIDNUMBER收费员2.8表的物理模子

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNzE1N2YwZWRkNjJmNDEzY2JmNjI5YWZkZGRhZTY2YTkucG5n
3.毗连数据库

3.1毗连当地的Oracle数据库


[*]下令:sqlplus system/Oracle
sqlplus是下令行交互工具;system是登任命户的账户,Oracle是登任命户的暗码。这种情势毗连的是默认实例(和情况变量的设置有关)。
[*]下令:sqlplus system/Oracle@localhost:1521/Orcl
毗连@localhosts:1521主机上的名字为Orcl的实例。
3.2毗连远程Oracle数据库

下令:sqlplus system/Oracle@远程主机的ip地点/实例名
3.3 退出毗连

下令:EXIT;
或下令:QUIT;
4.创建表空间、用户、赋用户权

4.1创建表空间

下令:
create tablespace waterboss
datafile 'C:\Users\14210\Documents\Oracle\waterboss.dbf'
size 100m
autoextend on
next 10m;
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvYzRkNjdiYTJjMmVjNDVjMGIzNDIxNzY3NmQxM2ZiNGYucG5n
表明:
waterboss:为表空间名称。
datafile:用于设置物理文件名称(实验下令后主动创建)。
size:用于设置表空间的初始巨细。
autoextend on:用于设置主动增长,假如存储量凌驾初始巨细,则开始主动扩容。
next:用于设置扩容的空间巨细(next 10:每当空间不敷用,直接扩容10m)。
表空间是一个容器,用来存放数据库对象,像表、索引这类。数据库的数据文件在物理层面上存储着数据,而表空间则在逻辑层面举行管理。举个不适当的例子,一栋房子内里有很巨细差别的房间,这一栋楼是一个数据库,内里的每个房间是表空间,表空间里可以放表、索引等数据库对象。
注意:要在运行 Oracle 服务的 Windows 用户有权限的目次下创建表空间。
反例:
create tablespace waterboss
datafile 'C:waterboss.dbf'
size 100m
autoextend on
next 10m;
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvMGRjMDhhOGU1NDM1NGU1NWI5ZDUwMmI1ODAyNTI4YTQucG5n
报错的缘故原由:运行 Oracle 服务的 Windows 用户在没有在 C:\ 目次下创建文件的权限。
4.2创建用户

下令:
create user wateruser
identified by Oracle
default tablespace waterboss
表明:
wateruser:为创建的用户的用户名。
identified by:用于设置用户的暗码。
default tablesapce:用于指定默认表空间名称。
指定用户在表空间的作用:该用户创建的表会被默认放在被指定的表空间中,方便用户对数据库对象的管理。
当实验下令发生以下报错:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNWUzMzVjNTFmMzEwNDY3MDgyYjg1ZTVlNTUxZWYyYmQucG5n
分析在CDB容器数据库中,在 CDB(容器数据库) 的根容器中创建用户时,用户名必须包罗前缀 C##(比方 C##wateruser)
办理方案:

[*]在 CDB 中创建公共用户(需前缀)
CREATE USER C##wateruser
IDENTIFIED BY Oracle
DEFAULT TABLESPACE waterboss;

[*]在 PDB 中创建当地用户
毗连到目标 PDB:
ALTER SESSION SET CONTAINER = your_pdb_name;-- 替换为实际 PDB 名称(如 ORCLPDB1)
-- 然后创建用户
CREATE USER wateruser
IDENTIFIED BY Oracle
DEFAULT TABLESPACE waterboss;

4.2 CDB和PDB的区别

特性CDB(容器数据库)PDB(可插拔数据库)用途管理多个 PDB存储业务数据和应用对象用户创建须要前缀 C##(公共用户)无前缀要求(当地用户)可见性全部 PDB 共享 CDB 的元数据数据独立,仅本 PDB 可见利用范围全局(影响全部 PDB)仅限当前 PDBCDB 中的用户和 PDB 中的用户有以下接洽:
公共用户:在 CDB 中创建的公共用户,其名称以 C## 或 c## 开头。这些公共用户可以在全部的 PDB 中利用,而且具有雷同的权限和脚色。公共用户重要用于管理 CDB 和 PDB,比方实验备份、规复、创建和管理 PDB 等利用。
当地用户:PDB 中的当地用户只能在其所在的 PDB 中利用,不能在其他 PDB 或 CDB 中利用。当地用户的名称不能以 C## 或 c## 开头。当地用户重要用于存储和管理 PDB 中的业务数据和应用对象。
权限继续:公共用户在 CDB 中被授予的权限可以主动继续到各个 PDB 中。比方,假如一个公共用户在 CDB 中被授予了 CREATE TABLE 权限,那么该用户在全部的 PDB 中也具有 CREATE TABLE 权限。而当地用户的权限仅在其所在的 PDB 内有用,与 CDB 中的其他用户和 PDB 无关。
管理关系:CDB 中的用户可以对 PDB 中的用户举行管理,比方创建、修改和删除 PDB 中的用户。别的,CDB 中的用户还可以对 PDB 的资源举行管理,如设置 PDB 的内存限定、CPU 利用率等。
4.3 用户赋权

为什么要给用户赋权呢?
答:由于刚创建的用户是一个小白,什么都不会,连最根本的登录权限都没有。
示例:
登录,下令:sqlplus C##wateruser/Oracle
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvMWYxNDM1ZWUwYzYyNDY2Njg2ZTcwNmNmNGRlMDcyM2EucG5n
给用户赋权:

[*]先登录system用户:
下令:sqlplus system/Oracle
[*]给用户赋权
下令:grant dba to wateruser
DBA(Database Administrator)权限是数据库管理员所拥有的一组高级权限,用于全面管理和维护数据库体系
还可以把一个脚色的权限赋给用户:
下令:grant 脚色名字 to 用户
取消用户已有的权限:
REVOKE privilege_list
FROM user_list;
4.4常用的数据库权限

数据访问权限:
SELECT:允许用户查询指定表或视图中的数据。比方,用户须要获取员工信息表中的数据,就须要被授予对该表的 SELECT 权限。
INSERT:赋予用户向指定表中插入新数据的本领。好比,当有新员工入职时,负责录入数据的用户须要 INSERT 权限才气将新员工信息插入到员工表中。
UPDATE:利用户可以大概修改指定表中已存在的数据。如人力资源部门的用户须要更新员工的薪资信息,就须要对薪资字段所在表具有 UPDATE 权限。
DELETE:允许用户删除指定表中的数据。比方,当员工去职时,须要删除其在员工表中的记载,实验该利用的用户需具备 DELETE 权限。
数据库对象管理权限:
CREATE TABLE:允许用户在数据库中创建新的表。开辟职员在筹划数据库架构时,须要此权限来创建存储数据的表布局。
CREATE VIEW:用户可以创建视图,以便根据自己的需求对数据举行定制化的展示和查询。比方,创建一个只包罗特定部门员工信息的视图,方便干系职员检察。
CREATE INDEX:赋予用户在表上创建索引的权限,以进步数据查询的性能。对于经常用于查询条件的字段,创建
索引可以加速查询速率。
ALTER TABLE:利用户可以大概修改表的布局,如添加或删除列、修改列的数据范例等。当业务需求发生厘革,须要对表布局举行调解时,干系用户就须要 ALTER TABLE 权限。
毗连和利用权限:
CREATE SESSION:允许用户毗连到数据库并创建会话。只有拥有此权限,用户才气登录到数据库体系举行利用。
RESOURCE:这是一个预界说的脚色,包罗了一些根本的资源利用权限,如创建表、存储过程等数据库对象的权限,通常会授予开辟职员或须要举行数据库对象开辟的用户。
CONNECT:也是一个预界说脚色,重要用于赋予用户毗连数据库的根本权限,以及一些与数据库毗连干系的利用权限,如检察数据库布局等。
5.表的创建、修改、与删除

5.1表的创建

5.1.1 语法

语法:
create table 表的名字(
字段名(列名) 类型 ,
字段名(列名) 类型 [自己补充],
......
)
这里的字段名可以和C语言的 int a,只不外反过来写了,在Oracle表中为a int。[] 中可以增长索引大概主动增长型,等等。
5.1.2常用范例值


[*]字符型
(1)CHAR : 固定长度的字符范例,最多存储 2000 个字节。简朴的来说,char(n),n表现多少个字符。
(2)VARCHAR2 :可变长度的字符范例,最多存储 4000 个字节
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
(3)LONG : 大文本范例。最大可以存储 2 个 G
[*]数值型
NUMBER : 数值范例
NUMBER(5) 最大可以存的数为 99999
NUMBER(5,2) 最大可以存的数为 999.99
[*]日期型
(1)DATE:日期时间型,准确到秒
(2)TIMESTAMP:准确到秒的小数点后 9 位
[*]二进制型(大数据范例)
(1)CLOB : 存储字符,最大可以存 4 个 G
(2)BLOB:存储图像、声音、视频等二进制数据,最多可以存 4 个 G
5.1.3创建表

(1)创建业主范例表(OWNERTYPE)
字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是范例名称下令:
create table OWNERTYPE(
id number primary key,
name VARCHAR2(30) not null
);
not null :黑白空的意思。
primary key:是主键索引,一个表中只能有一个主键索引,而且主键索引默认黑白空。
(2)创建地域表(AREA)
字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是地域名称下令:
create table AREA(
id number primary key,
name varchar2(30) not null
);
(3)收费员表(OPERATOR)
字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是利用员名称下令:
create table OPERATOR(
id number primary key,
name varchar2(30) not null
);
(4)创建地点表(ADDRESS)
字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是地点名称AREAIDNUMBER是地域IDOPERATORIDNUMBER是利用员ID下令(创建表的同时设置外键束缚):
create table ADDRESS(
id number primary key,
name varchar2(30) not null,
AREA_id number not null,
OPERATOR_id number not null,
foreign key (AREA_id) references ADDRESS(id),
foreign key (OPERATOR_id) references OPERATOR(id)
);
foreign key (AREA_id) references ADDRESS(id):把表内的AREA_id字段与外表ADDRESS的id字段创建接洽。当插入数据的时间当且只能数据表ADDRESS中存在的id。
下令(创建表后设置外键束缚):
create table ADDRESS(
id number primary key,
name varchar2(30) not null,
AREA_id number not null,
OPERATOR_id number not null
);

alter table ADDRESS
add foreign key (AREA_id) references AREA(id),
add foreign key (OPERATOR_id) references OPERATOR(id);
(5)创建业主表(OWNERS)
字段名范例(位数)是否必填分析IDNUMBER是主键NAMEVARCHAR2(30)是业主名称ADDRESSIDNUMBER是地点IDHOUSENUMBERVARCHAR2(30)是门牌号WATERMETERVARCHAR2(30)是水表编号ADDDATEDATE是登记日期OWNERTYPEIDNUMBER是业主范例ID下令:
create table OWNERS(
id number primary key,
name varchar2(30) not null,
ADDRESS_id number not null,
housenumber varchar2(30) not null,
watermeter varchar2(30) not null,
adddate date not null,
OWNERTYPE_id number not null,
foreign key (ADDRESS_id) references ADDRESS(id),
foreign key (OWNERTYPE_id) references OWNERTYPE(id)
);
(6)创建代价表(PRICE)
字段名范例(位数)是否必填分析IDNUMBER是主键PRICENUMBER(10,2)是代价OWNERTYPEIDNUMBER是业主范例IDMINNUMNUMBER(10,2)是区间数开始值MAXNUMNUMBER(10,2)是区间数制止值下令:
create table PRICE(
id number primary key,
price number(10,2) not null,
OWNERTYPE_id number not null,
minnum number(10,2) not null,
maxnum number(10,2) not null,
foreign key (OWNERTYPE_id) references OWNERTYPE(id)
);
(7)创建收费台账(ACCOUNT)
字段名范例(位数)是否必填分析IDNUMBER是主键OWNERIDNUMBER是业主编号OWNERTYPEIDNUMBER是业主范例AREAIDNUMBER是所在地域YEARCHAR(4)是账务年份MONTHCHAR(2)是账务月份NUM0NUMBER上月累计数NUM1NUMBER本月累计数USENUMNUMBER本月利用数METERUSERIDNUMBER抄表员METERDATEDATE抄表日期MONEYNUMBER(10,2)应缴金额ISFEECHAR(1)是是否缴费FEEDATEDATE缴费日期FEEUSERIDNUMBER收费员下令:
create table ACCOUNT(
id number primary key,
OWNER_id number not null,
OWNERTYPE_id number not null,
AREA_id number not null.
yera char(4) not null,
num0 number ,
num1 number,
usenum number,
meteruserid number,
meterdate date,
money number(10,2),
isfee char(1),
feedate date,
feeuserid number
);
5.2修改表

5.2.1增长字段

语法:
alter table table_name add (
字段名 类型 ,
字段名 类型,
......
);
5.2.2修改字段的范例

语法:
alter table table_name modify(
字段名 新类型,
字段名 新类型
.....
);
5.2.3修改字段的名字

语法:
alter table table_name rename column 原列名 to 新列名;
5.2.4删除字段

语法:
删除一个字段
alter table table_name drop 字段名;
删除多个字段:
alter table table_name drop column (列名1,列名2);
5.2.5 删除表

drop table table_name;
6.表的增编削

6.1插入一行数据

创建一个表:
create table t1(
id number primary key,
name varchar2(10),
age number
);
语法:
插入一行中全部列
--方法1:
insert intotable_name
(id,name,age)
values(值1,值2,值3)

--方法2:
insert into t1
values(值1,值2,值3);
插入一行中的某列
insert into t1 (id, name)
values(值1,值2);
6.2插入多行数据

INSERT ALL
    INTO t1 (id,name,age) VALUES (1, 'John Doe', 10)
    INTO t1 (id,name,age) VALUES (2, 'Jane Smith', 20)
    INTO t1 id,name,age) VALUES (3, 'Bob Johnson', 10)
SELECT * FROM dual;
dual 是 Oracle 中的一个假造表,SELECT * FROM dual 用于触发 INSERT ALL 利用。这种方式能进步插入服从,尤其是在插入多行数据时。
6.2修改数据

语法:
update table_name set column_name=值1,column_name=值2 ...
where 限制列 =值;
column_name:是须要修改的字段名。
where:where后买是限定条件。
假如,在t1表中插入一行数据:insert into t1(id,name,age) values (1, ‘李明’,20);
如今须要修改李明的年事为21:
update t1 set age=20 where id=1;
6.3 删除数据

删除表中某数据:
delete from table_name where 限制条件;
删除表中全部数据:
TRUNCATE TABLE 表名称
比力 truncat 与 delete 实现数据删除?

[*]delete 删除的数据可以 rollback
[*]delete 删除大概产生碎片,而且不开释空间
[*]truncate 是先摧毁表布局,再重构表布局
页: [1]
查看完整版本: 【小白学习Oracle】理论和实践联合,一个项目带你学会Oracle底子语法