Oracle 数据库学习笔记 (二)

1.5 如何删除表空间?

表空间是一个文件,真真实实存存放在物理硬盘中,如果我们不需要该表空间的时候,就可以对其进行删除处理。但是我们不能直接删除表空间(.dbf)文件,这样会报错。因此我们需要先使用命令行删除在 数据库中的表空间,然后才可以在物理磁盘中删除表空间文件

因此正确的删除表空间的步骤如下:

  1. 使用命令行删除表空间

  2. 然后才可以删除物理磁盘上的表空间

drop tablespace my_mobile

drop 是个很万能的语句,它还能够直接清空表字段中的数据

二、表的相关操作

=======================================================================

2.1 创建表

语法

create table .表名称(

字段名称1 字段类型 [default 默认值],

字段名称2 字段类型 [default 默认值],

字段名称n 字段类型 [default 默认值]

)

eg:创建一个学生类型的信息表

create table tb_student(

stuId number, – 学生的ID

stuName nvarchar(8), – 学生的姓名

stuIdCard number(18,0), – 学生身份证

stuGender nvarchar2(2) default ‘男’, – 学生性别,默认为 0

stuAge number(3), – 学生的年龄

)

2.2 插入数据 insert

语法:

  1. 形式一

insert into 表名(参数1,参数2,参数3…参数n) values (参数1对应的值,参数2对应的值,…,参数n对应的值);

  1. 形式二

insert into 表名 values(参数1对应的值,参数2对应的值…,参数n对应的值)

两者的区别如下:

  1. 前者是指定类型插入,可以选择性的插入指定的数据

  2. 后者必须插入表所有属性的值,也就是一个都不能漏掉

eg:以上面的学生表为例

insert into tb_student (stuId,stuIdCard,stuGender,stuAge,tid) values(20171111034,320101197905156354,‘男’,19,2)

2.3 表创建(约束)

在数据库的设计中,约束是必不可少的支持,使用约束可以更好的保证数据库中数据的完整性,约束的作用是定义规则

举几个例子:

  1. 人的身份证有 18 位,这个不加约束的话,有的人乱填,就会出现很多问题

  2. 一个人的性别分为 ‘男’,‘女’,‘未知’,这也不能乱填

  3. 每当学校新生入学的时候,总是会必不可免的出现有人同名的情况,但是他们的身份证不一样,所以可以另外添加一个学号属性,这样这个学生就是唯一的啦

  4. 还有人的年龄一般不会超过 150岁,所以插入数据的时候也需要加一个判断,年龄是否超出呢?是不是

约束的分类:

| 约束分类 | 约束功能 |

| — | — |

| 主键约束 | 主键是唯一的表示,本身不能为空(比如在学校你想确认一个同学,可以通过他的学号定位到他) |

| 唯一约束 | 在一个表中一次只允许建立一个主键约束,而其他列不希望出现重复值的情况下,可以使用唯一约束。一张表中的唯一约束可以有多个,并且允许有空值 ,空值只能有一个 |

| 检查约束 | 检查一列的内容是否合格 ,例如:年龄输入加一个限制,在0 ~ 150之间 ,性别,只能是男或者女 |

| 非空约束 | 字段里面的内容不能为空 |

| 外键约束 | 在两张表中进行约束操作,这就要区别一下父表和子表的区别啦,父表的 ID 可以对 子表的 ID 具有约束租用 |

2.3.1 主键约束

关键字:primary key

主键约束可以确认每一行数据的唯一性

eg:还是以上面创建学生表为例

create table tb_student(

stuId number primary key, – 学生的ID,学生的 ID 作为主键,而且不为空

stuName nvarchar(8), – 学生的姓名

stuIdCard number(18,0), – 学生身份证

stuGender nvarchar2(2) default ‘男’, – 学生性别,默认为 0

stuAge number(3), – 学生的年龄

– 另一种创建 主键的方式

– constraint tb_student_stuId_pk primary key(stuId) pk 是我另外给主键创建的一个名称

)

这个在插入数据的时候,才会出来问题,如果插入两个数据的 ID 相同就会报错

使用了主键约束,就相当于使用了非空约束

在修改表的时候增加主键约束

语法:add coinstraint constraint_name primary key(column_name1 .....);

– 给学生 id 加上主键

alter table tb_student add contraint pk_id primary key(stuId);

更改约束名称

语法:rename constraint old_name to new_name

alter table tb_student rename pk_id to new_pk_id;

删除主键约束

约束的禁用

语法:disable | enable constraint constraint_name

alter table tb_student disable constraint new_pk_id; – 约束禁用

alter table drop constraint new_pk_id; – 删除主键

alter table drop primary key; – 删除主键约束

2.3.2 非空约束

关键字:not null

使用非空约束,表示一个字段的内容不允许为空,即:插入数据的时候必须插入内容

创建表的时候增加约束

eg:只用在每个列属性后面加上 not null 就可以啦

create table tb_student(

stuId number primary key, – 学生的ID,学生的 ID 作为主键,而且不为空

stuName nvarchar(8) not null, – 学生的姓名

stuIdCard number(18,0) not null, – 学生身份证

stuGender nvarchar2(2) default ‘男’, – 学生性别,默认为 0

stuAge number(3) not null – 学生的年龄

)

修改表时增加约束

语法:alter table table_name modify column_name dataType NOT null;

alter table tb_student modify stuName nvarchar(8) not null;

修改表时去掉非空约束

语法:alter table table_name modify column_name dataType null;

2.3.3 唯一约束

关键字:unique

表示一个字段中的内容是唯一的,其他列不允许重复

eg:使用了这个关键字就要好好注意一下

create table tb_student(

stuId number primary key, – 学生的ID,学生的 ID 作为主键,而且不为空

stuName nvarchar(8) not null, – 学生的姓名

stuIdCard number(18,0) unique not null, – 学生身份证

stuGender nvarchar2(2) default ‘男’, – 学生性别,默认为 0

stuAge number(3) not null – 学生的年龄

)

另一种方式设置 唯一约束

create table tb_student(

stuId number primary key, – 学生的ID,学生的 ID 作为主键,而且不为空

stuName nvarchar(8) not null, – 学生的姓名

stuIdCard number(18,0) not null, – 学生身份证

stuGender nvarchar2(2) default ‘男’, – 学生性别,默认为 0

stuAge number(3) not null – 学生的年龄

– 给唯一约束 创建别名

– 格式 constraint 表名_列名_uk unique (列1,列2),

– constaint tb_student_stuName_uk unique(stuName)

CONSTRAINT stu_Id_uk UNIQUE(stuIdCard ) – 唯一约束的另一种方式

)

修改表的时候添加唯一约束

alter table tb_student add constraint stu_Id_uq unique(stuIdCard);

删除唯一约束

alter table xxx disable | enable constraint xxx; – 暂时禁用

alter table xxx drop constraint xxx; – 永久删除

2.3.4 检查约束

关键字:check

使用检查约束来判断一个列中插入的内容是否合法,例如:年龄的取值范围,性别的取值范围

注意:

  1. 可以使用 where(条件判断) 表达式后面就可以使用 check

eg:性别 和 年龄的检查约束

create table tb_student(

stuId number primary key, – 学生的ID,学生的 ID 作为主键,而且不为空

stuName nvarchar(8) not null, – 学生的姓名

stuIdCard number(18,0) unique not null, – 学生身份证

— test

stuGender nvarchar2(2) default ‘男’ check(stuGender in (‘男’,‘女’,‘不详’)), – 学生性别,默认为 0

stuAge number(3) not null check (stuAge between 0 and 150)-- 学生的年龄

– 检查约束另外起名

– constraint tb_student_stuAge_ck check (stuAge between 0 and 150)

– constraint tb_student_stuGender_ck check (stuGender in (‘男’,‘女’,‘不详’))

)

删除检查约束

alter table xxx disable | enable constraint xxx; – 暂时禁用

alter table xxx drop constraint xxx; – 永久删除

2.3.5 外键约束
  • 创建表时设置外键约束

  • 在修改表时添加外键约束

  • 删除外键约束

关键字:

  1. foreign key

  2. REFERENCES

主-外键约束是针对两张表的约束

有一张表 TA ,且表有主键,另外一张表中的某一列的数据完全取自于 TA,此时就 TB 表中该列为外键列,添加主外约束来限制它 (TB 外键列上添加)

是不是有点绕口,我换个说法给大家

有两张表 A和B,A 表中的主键记为 AId,表B 的主键记为 BID,表 B 的 BID 加一个 外键,引入 AId,也就是说,以后 Aid 中的所有值,BID 才可以使用

eg:

  1. 先创建一个 表A, person 类型

CREATE TABLE person (

pid VARCHAR2(18),

name VARCHAR2(200)NOT NULL,

age NUMBER(3)NOT NULL,

birthday DATE,

sex VARCHAR2(2)DEFAULT’男”,

CONSTRAINT person_pid_pk PRIMARY KEY(pid),

CONSTRAINT person_name_uk UNIQUE(name),

CONSTRAINT person_age_ck CHECK(age BETWEEN O AND 150),

CONSTRAINT person_sex_ck CHECK(sex IN("男,’女,“中))

);

  1. 创建一个表 B

CREATE TABLE book (

bid NUMBER PRIMARY KEY NOT NULL,

bname VARCHAR(30),

bprice NUMBER(5,2),

pid VARCHAR2(18) REFERENCES person(pid) – 通过 references 引入外键,这里的外键是主表

– constraint person_book_pid_fk foreign key(pid) references person(pid)

);

这样就完成了主外键的操作,但是有几点需要注意

  1. 主表先创建,然后插入数据,再创建附表(主外键)才可以创建

  2. 如过要删除主表中的某一条数据,如果此列的数据被附表的主外键引用,则不能删除

  3. 希望一个表中数据在删除时,可以自动删除其对应的子表记录,则可以使用级联删除操作

总结:

CREATE TABLE person(

pid VARCHAR2(18),

name VARCHAR2(200)NOT NULL,

age NUMBER(3)NOT NULL,

birthday DATE,

sex VARCHAR2(2)DEFAULT’男,

classid CONSTRAINT person_pid_pk PRIMARY KEY(pid),

CONSTRAINT person_name_uk UNIQUE(name),

CONSTRAINT person_age_Ck CHECK(age BETWEEN O AND 150),

CONSTRAINT person_sex_ck CHECK(sex IN‘男’,女,”中”))

);

CREATE TABLE book

bid NUMBER PRIMARY KEY NOT NULL,

bname VARCHAR(30),bprice NUMBER(5,2),

pid VARCHAR2(18)CONSTRAINT person_book_pid_fk FOREIGN KE(pid)REFERENCES person(pid)

删除外键约束

alter table xxx disable | enable constraint xxx; – 暂时禁用

alter table xxx drop constraint xxx; – 永久删除

2.3.6 总结

约束总共分为五类,分别是:

  1. 主键约束 primary key

  2. 非空约束 not null

  3. 检查约束 check

  4. 外键约束 foreign key

  5. 唯一约束 unique

在使用的时候,如果表已经创建好,我们需要额外添加约束关系的话,可以使用如下方法

增加约束

alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)

删除约束

alter table 表名 disable | enable constraint 约束类型;

alter table 表名 drop constraint 约束类型; – 永久删除

2.4 序列

2.4.1 创建序列

序列是一个计数器,它并不会与特定的表相关联。通过创建 Oracle 序列可以实现表的主键自增。序列的用途一般用来填充主键和计数

特性

  • 自动填充唯一的数值

  • 共享对象

  • 主要用于提供主键值

  • 代替应用代码

  • 将序列装入内存可以提高访问效率

语法:

create sequence 序列名

increment by n, – 步长,每次增加的数据

start with n, – 从 n 开始计数

maxvalue n| nomaxvalue, – 最大值、无最大值

minvalue n| nominvalue, – 最小值、无最小值

cycle | nocycle – 循环序列,不循环

cache n | nocache; – 缓冲池,将数据加载到内存,提高性能,但是容易损失数据

创建序列:

从 100 开始,每次增加10个步长,最大值 1w,不循环,不进入缓冲池

create sequence dept_deptid_seq

increment by 10

start width 100

maxvalue 10000

nocache

nocycle

2.4.2 查询序列

nextval 和 currval 伪例

  • nextval 返回序列中下一个有效的值,任何用户都可以引用

  • currval 中存放序列的当前值

  • nextval 应在 currval 之前指定,二者应同时有效

select 序列名.currval from dual --dual 是虚拟表,不存在的表

2.4.3 修改序列的值

使用 alert 关键字进行修改

修改序列的增量,最大值,最小值,循环选项,或是否装入内存(不能修改序列的初始值)

alert sequence 表名

increment by 20

maxvalue 99999

nocache

nocycle

修改限制:

  • 必须是序列的拥有者或对序列有 alert 权限

  • 只有将来的序列值会被改变

  • 改变序列的初始值只能通过删除序列之后重建序列的方法实现

2.4.4 序列问题
  • 将序列值装入内存可提高访问效率

  • 序列会在下面的情况出现裂缝

  • 回滚

  • 系统异常

  • 多个表同时使用同一个序列

  • 如果不将序列的值装入内存(nocache),可使用表 user_sequences 查看当前的有效值

2.4.5 删除序列

drop sequence 表名;

  • sequence dropped

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
限制:

  • 必须是序列的拥有者或对序列有 alert 权限

  • 只有将来的序列值会被改变

  • 改变序列的初始值只能通过删除序列之后重建序列的方法实现

2.4.4 序列问题
  • 将序列值装入内存可提高访问效率

  • 序列会在下面的情况出现裂缝

  • 回滚

  • 系统异常

  • 多个表同时使用同一个序列

  • 如果不将序列的值装入内存(nocache),可使用表 user_sequences 查看当前的有效值

2.4.5 删除序列

drop sequence 表名;

  • sequence dropped

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-wZc7mail-1715864762884)]

[外链图片转存中…(img-URwh6j4S-1715864762884)]

[外链图片转存中…(img-TD1Y0Ha7-1715864762885)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值