什么是數據庫對象
數據庫對象包括 表 索引 分區 視圖 序列 同義詞
數據庫支持對象
存儲過程 自定義函數 觸發器 表空間 高級包
表 數據庫中的數據結構 存儲數據以及描述數據間的關系
表由行和列組成 數據庫中數據存儲數據的基本單元
分類
普通表 數據全局可見 存儲在普通表空間 支持分區和LOB類型
會話級全局臨時表 數據會話級可見 存儲在temp表空間 不支持分區和LOB類型
事務級全局臨時表 事務會話級可見 存儲在temp表空間 不支持分區和LOB類型
本地臨時表 表結構會話級可見 存儲在temp表中 不支持分別和LOB類型 表明必須以#為前綴
Nologging表 數據全局可見 存儲在temp2空間 支持分區和lob類型
語法 查詢表空間 select * from dv_tablespaces
# create table
在表空間 human_resource中創建表staffs
create table staffs ( staff_id not null primary key auto_increment , first_name varchar(20), last_name varchar(20), graduated_name char(50) ) tablespace human_resource NOLOGGING
穿件會話級|| 事務級 全局臨時表
create global temporary table staff_session ( id int, owner char(10) ) On commit preserve || DELETE ROWs
更改表語法 alter table
# 新增列 alter table schema_name.table_name add full_masks int; # 刪除列 alter table schema_name.table_name drop source; # 添加約束 alter table schema_name.table_name add constraint ck_training check(staff_id>0); # 刪除約束 alter table schema_name.table_name drop constraint ck_training; # 重命名training_New alter table schema_name.table_name rename to training_new; # 刪除表 # 直接刪除表 dtop table if exists staff; purge;
索引:索引是對表中一列或者多列的值 進行排序的一種結構 可以提高查詢性能
普通索引 B-TREE
唯一索引 unique
函數索引 簡歷在函數基礎上的索引
分區索引 在表的分區上創建的索引 在刪除時不影響其他分區索引的使用
創建索引 # CLOB BLOB IMAGE對象不能有索引 create index staffs_ind on staffs(staff_id) tablespace human_resource; 更改索引 # 在線重建索引 alter index staff_ind rebuild online; # index重命名 alter inedx staffs_ind rename to staffs_new # 刪除索引 drop index if exists staffs_ind staffs_new on table_name;
分區
把邏輯上的一張表根據某種方案分為幾張 物理塊進行存儲 這邏輯的表稱為分區表 物理塊稱之為分區
分區表是一張邏輯表 不存儲數據 數據實際存儲在分區上
范圍分區 range 適用於流水 日志等大表 需要根據時間刪除歷史日志
間隔分區 interval 相對range更加方便 設置分區間隔 和初始分區鍵指
列表分區 list 適用於離散值場景
哈希分區 hash 適用於把數據分離開 而不是為了刪除數據
# 創建list分區 create table table_name ( user_id int primary key auto_increment, username char(10) ) PARTITION by LIST(user_id) ( partition part1 values values (1), partition part2 values values (5), partition part3 values values (10) ); # 創建分區 RANGE create table table_range ( user_id int primary key auto_increment, username char(10) ) PARTITION by RANGE(user_id) ( partition R_0 values less than (50), partition R_1 values less than (100), partition R_2 values less than (150) ); # 更改分區 添加分區R_MAX alter table table_range add partition R_MAX values less than(maxvalues); # 刪除分區 R_1 alter table table_range Drop partition R_1 ; # 分裂分區 將R_0 分成R_0_0 R_0_1 其中00的邊界為25 alter table table_range SPLITE PARTITION R_0 at(25) into (partition R_0_0 ,partition R_0_1);
分區索引
分區索引是在分區上獨立創建索引 在刪除某個分區時 不影響其他分區索引的使用
create index index_edu on education(staff_id ,higest_degree) # 創建分區索引 drop index if exists index_edu on education: 刪除分區表索引 alter table education drop partition doctor ; 刪除分區 doctor drop table if exists education ; 刪除分區表education
視圖:
視圖從一個或幾個表導出的虛擬表 用於數據訪問
# 創建視圖 create or replace view privilege_view(staff , privilege ,description,appover) as select * from privilege ; # 刪除視圖 drop view if exists privilige_view ;
序列:
# 創建序列 create sequence seq_auto_extend start with 10 maxvalue 200 increament by 2 cycle ; # 修改序列 修改步長為4 最大值為400 alter sequence seq_auto_extend increment by 4 cycle maxvalue 400 ; # 刪除序列 drop sequement if exists seq_auto_extend;