数据库表操作

建表删表

建表语句

--建表语句
create table Student
(
  ID                INTEGER constraint Student_KEY_1 primary key,--设定主键,同时会自动创建唯一索引
  NAME              VARCHAR2(50) NOT NULL , --设定非空
  SEX               CHAR(1)  constraint SEX_CHK CHECK (SEX IN ('0','1')),--添加检查性约束,值只能为0/1
  AGE               NUMBER(3),
  BIRTHDAY          DATE,
  Student_NUMBER    NUMBER(3,1),--设定为:3位数字.1位数字
  Student_CHAR      CHAR(10) default '默认值1',--注意CHAR类型对于不足的长度会自动补空格
  Student_VARCHAR2  VARCHAR2(10) default '默认值2'
);

--添加注释
comment on table Student is '学生表';
comment on column Student.ID is '主键';
comment on column Student.NAME is '姓名';
comment on column Student.SEX is '性别';
comment on column Student.AGE is '年龄';
comment on column Student.BIRTHDAY is '生日';
comment on column Student.Student_NUMBER is 'NUMBER类型测试';
comment on column Student.Student_CHAR is 'CHAR类型测试';
comment on column Student.Student_VARCHAR2 is 'VARCHAR2类型测试';

删除表

--删除表,包括表数据和结构
drop table 表名

-- 清空表数据
truncate table 表名

添加注释

--表注释
comment on table 表名 is '注释';
comment on table 所有者.表名 is '注释';

--字段注释
comment on column 表名.字段名 is '注释';
comment on column 所有者.表名.字段名 is '注释';

字段类型

下表列出了几种常用数据类型。要注意,不同的关系数据库管理系统中支持的数据类型不完全相同

数据类型含义
CHAR(n),CHARACTER(n)长度为 n 的定长字符串,对于长度不足n的数据会自动补空格
VARCHAR(n) ,CHARACTERVARYING(n)最大长度为 n 的变长字符串
CLOB字符串大对象
BLOB二进制大对
INT,INTEGER长整数(4字节)
SMALLINT短整数(2字节)
BIGINT大整数(8字节)
NUMERIC(p,d)定点数,由 p 位数字(不包括符号、小数点)组成,小数点后面有 d 位数字。即(3,1)应为:3位数字.1位数字
DECIMAL(p,d),DEC(p,d)同 NUMERIC
REAL取决于机器精度的单精度浮点数
DOUBLE PRECISION取决于机器精度的双精度浮点数
FLOAT(n)可选精度的浮点数,精度至少为 n 位数字
BOOLEAN逻辑布尔量
DATE日期,包含年、月、日,格式为 YYYY - MM - DD
TIME时间,包含一日的时、分、秒,格式为 HH : MM : SS
TIMESTAMP时间戳类型
INTERVAL时间间隔类型

字段修改

--新增字段
--新增字段名之后跟新增字段的类型
alter table 表名 add(新增字段名 varchar2(4))

--修改字段类型
--修改字段名之后跟修改为的参数类型和长度
alter table 表名 modify(修改字段名 NUMBER(8,2));
--修改字段名
alter table 表名 rename column 旧字段名 to 修改后的新字段名;

--删除字段
alter table 表名 drop column 删除字段名

修改字段默认值

--修改字段默认值
--主要此修改不会影响到存量数据,之后影响之后的增量数据
alter table 表名 modify 字段 default 默认值;

关键字约束

类型和概念

类型含义备注
unique唯一约束创建唯一约束会自动创建唯一索引
primary主键约束创建主键约束会自动创建唯一索引
foreign外键约束

主键约束(PRIMARY KEY)

1、主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。
2、是不可能(或很难)更新.
3、主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
4、主健可作外健,唯一索引不可;

唯一性约束(PRIMARY KEY)
1、唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
2、只要唯一就可以更新.
3、即表中任意两行在指定列上都不允许有相同的值, 允许空(NULL).
4、一个表上可以放置多个唯一性约束

相关语句

--新增单个唯一性约束
alter table 表名 add constraint 添加的唯一性约束名 unique(对应的字段列);
--新增组合唯一性约束
alter table 表名 add constraint 添加的唯一性约束名 unique(对应的字段列1,对应的字段列2);

--新增单个主键约束
alter table 表名 add constraint 添加的关键字名称 primary key(对应的主键列);
--新增组合主键约束
alter table 表名 add constraint 添加的关键字名称 primary key(对应的主键列1,对应的主键列2);

--新增外键约束
--与外键关联的主表的字段必须设置为主键
--要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
alter table 表名 add constraint 外键约束名 foreign key(表名对应的字段) references 外键约束对应的表名(外键约束对应的字段名);

--删除关键字约束
alter table 表名 drop constraint 删除的关键字名称;

--禁用关键字约束
alter table 表名 disable constraint 关键字约束名;
--启用关键字约束
alter table 表名 enable constraint 关键字约束名;

在这里插入图片描述

关键字约束的区别

唯一性约束和主键约束的区别:(PRIMARY KEY)
1、唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。
2、在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引

检查约束

--添加检查约束
--只能输入限定的值
alter table 表名 add constraint 检查约束名称 check(检查字段 in ('检查值1','检查值2'));
--只能输入限制范围的值
alter table 表名 add constraint 检查约束名称 check(检查字段>0 and 检查字段<=100);

--删除检查
ALTER TABLE 表名 DROP constraint 检查约束名称

在这里插入图片描述

索引

查询现有的索引

SELECT c.table_name      AS 表名,
       i.index_name      AS 索引名,
       i.index_type      AS 索引类型,
       c.column_name     AS 索引列名称,
       c.column_position AS 列的位置
  FROM user_ind_columns c
  JOIN user_indexes i
    ON c.index_name = i.index_name
 WHERE c.table_name = '表名';

索引类型

索引类型含义
NORMAL普通 B 树索引
UNIQUE唯一索引
BITMAP位图索引
FUNCTION-BASED NORMAL基于函数的普通 B 树索引
FUNCTION-BASED BITMAP基于函数的位图索引
DOMAIN域索引,用于实现对象类型的索引
LOBLOB 索引,用于索引长对象(Large Object,LOB)数据类型的表
IOT - TOP索引组织表(Index-Organized Table,IOT)的顶层索引
IOT - NESTEDIOT 的嵌套索引
IOT - OVERFLOWIOT 的溢出段索引
DOMAIN - LOB用于索引基于对象类型的 LOB 数据类型的表的域索引
XMLTYPEXML 数据类型的索引

索引的分类

按数据结构分类:B+tree索引、Hash索引、Full-text索引。
按物理存储分类:聚集索引、非聚集索引(也叫二级索引、辅助索引)。
按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。
按字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)。

各种索引的概念

🎈按数据结构分类

B树索引:普通 B 树索引。B树索引是Oracle默认的索引类型,它以B树结构组织并存储索引数据,不懂什么是B树的可以百度一下,你就知道。B树索引中的数据是以升序方式排序的,B树索引由根块、分支块和叶块组成,其中主要数据都集中在叶子节点上。Oracle采用这种方式的索引,可以确保无论索引条目在何处,只需要花费相同的I/O即可获取它,所以它被称为B(Balanced)树索引。如果在Where子句中要经常引用某列或某几列,应该基于这些列建立B树索引
在这里插入图片描述

位图索引:位图索引是一种高度压缩的索引类型,适用于在大型表中包含少量不同值的列上。位图索引适用于等值搜索,并且可以更快地处理多个位图索引之间的逻辑运算。位图索引不适用于频繁的插入、更新和删除操作。
对于不同值多少的划分,采用Oracel基数划分,比如一个表有10000行数据,其中的某一字段只有100种取值,基数则为1%,Oracle推荐,当一个字段基数小于1%时,适合建立位图索引

散列索引:散列索引使用散列函数将索引键转换为散列值,从而提高索引搜索性能。散列索引适用于等值搜索,但不适用于范围搜索或排序操作。散列索引在写入高并发表时性能通常很好,但是当表的大小增长时,它们可能会变得不稳定。

反向键索引:Oracle会自动为表的主键创建B树索引,通常主键会是一个递增的序列编号,如果使用默认的B树索引,当数据量巨大时会导致索引数据分布不均,叶子节点可能会偏向某一个方向,这时就需要另一个索引机制,反向键索引,它可以将添加的数据随机(全部数据都会进行反向)分散到索引中,它在顺序递增列上建立索引时非常有用。反向键索引的工作原理非常简单,在存储结构方面它与常规的B树索引相同。然而,如果用户使用序列在表中输入记录,则反向键索引首先指向每个列键值的字节,然后在反向后的新数据上进行索引。例如,如果用户输入的索引列为2011,则反向转换后为1102; 9527 反向转换后为7259。需要注意的是,刚才提及的两个序列编号是递增的,但是当进行反向键索引时却是非递增的。这意味着,如果将其添加到子叶节点中,则可能会在任意的子叶节点中进行。这样就使得新数据在值的范围上的分布通常比原来的有序数更均匀。

函数索引:函数索引是基于表达式的索引,可以用于在非直接存储在列中的值上进行搜索,例如,将字符串转换为大写字母。函数索引可以帮助您避免在查询中使用昂贵的函数操作,但是创建和维护函数索引可能会增加查询的成本。

--例如有函数索引
SUBSTR(字段名,1,1)

--则只能触发
SELECT * FROM 表名 WHERE SUBSTR(字段名,1,1)=''

--下面的这种方式也不能触发
SELECT * FROM 表名 WHERE SUBSTR(字段名,1,2)=''

🎃按物理存储分类

聚集索引(主键索引):将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据(所有字段的值)

非聚集索引(辅助索引):将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

⚽按字段特性分类

主键索引:是基于表的主键列创建的索引。主键是唯一标识表中每一行的列,它可以确保表中的每一行都有一个唯一的标识。主键索引可以加速对表的快速查找和唯一性约束。

唯一索引:唯一性是很常见的一种索引约束需求,重复的数据记录会带来许多处理上的麻烦,比如订单的编号、用户的登录名等。通过建立唯一性索引,可以保证集合中文档的指定字段拥有唯一值。.唯一性索引对于文档中缺失的字段,会使用null值代替,因此不允许存在多个文档缺失索引字段的情况

普通索引(INDEX):建立在普通字段上的索引被称为普通索引。

全文索引(Full-text Index):全文索引是用于对文本数据进行全文搜索的索引。它可以加速对文本内容的关键字搜索,支持模糊匹配和语义搜索等功能。

🎄按索引字段的个数分类

单列索引:建立在单个列上的索引被称为单列索引。

联合索引(复合索引、组合索引):建立在多个列上的索引被称为联合索引,又叫复合索引、组合索引。

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hvitur

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值