oracle建表相關 包括主鍵索引和外來鍵約束

2021-08-29 03:02:22 字數 1824 閱讀 1489

今天來聊一下oracle的建表語句,比如下面的

create table bbb_info 

( bbb_id number(8) not null,

aaa varchar2(8) null,

bbb varchar2(8) null,

ccc varchar2(8) null,

ddd varchar2(8) null,

constraint pk_bbb_info primary key (bbb_id)

);

create table aaa_info 

( aaa_id number(8) not null,

bbb_id number(8) null,

fff number(12) null,

hhh varchar2(8) null,

constraint aaa_info primary key (aaa_id)

);alter table aaa_info

add constraint fk_aaa__reference_bbb_ foreign key (bbb_id)

references bbb_info (bbb_id);

很明顯

bbb_info 表有乙個主鍵bbb_id,aaa_info有乙個主鍵aaa_id,然後bbb_id是aaa_info的外來鍵,這很簡單,入門sql就該會的。

但是今天建表的時候,設計給的是mysql的建表語句,加了很多不必要的屬性

其一:

原文:

因為新增一條資料時,oracle先去資料庫查詢此條新增資料是否存在,如果不存在則插入成功,否則插入失敗。試想下如oracle不自動建立索引,查該新增資料是否存在於資料庫就得整張表去掃瞄(千萬級資料表全表掃瞄是不可想象的),資料量大時影響效能是肯定的。那麼主鍵、唯一約束在新增資料時oracle都會先去資料庫查詢,用到查詢就要用到索引提高效能,所以他就會預設建立索索引來提高檢查資料是否存在來,從而提高查詢效率。這就是oracle自動建立索引的初衷。

結論:如果在plsql中,刪掉這個屬性就可以了。(有問題可以指正哈,我也是目前這麼覺得)

其二:

外來鍵約束這裡,他給的是加了級聯更新和級聯刪除的。

alter table aaa_info

add constraint fk_aaa__reference_bbb_ foreign key (bbb_id)

references bbb_info (bbb_id)

on update restrict

on delete restrict;

嗯,就是後面兩句。經過搜尋restrict是mysql的約束,oracle中相同的是no action。而且oracle中沒有更新的級聯的,只有刪除的,而且這個刪除的級聯是在你建立外來鍵的時候,就自己加上了的。

結論:如果在plsql中,刪掉後面這兩句就可以了。(有問題可以指正哈,我也是目前這麼覺得)

馬克一下,免得自己下一次忘記。

Oracle查詢建表相關

建立表 create table user 建立user表,號中區分大小寫,預設為大寫 id int primary key,primary key 主鍵關鍵字 name varchar 10 unique not null,unique 不許重複關鍵字,not null 不許為空關鍵字 age n...

oracle表相關操作

新增字段 可以單個,也可以多個 alter table 表名add 列名 修改字段 alter table 表名modify 列名 刪除字段 alter table 表名drop column 列名 新增主鍵 alter table 表名add constraint pk 約束名primary ke...

建表主鍵自增 Oracle建表,建主鍵,自增

oracle建表,建主鍵,自增 建表 create table test id number 4 not null primary key,name varchar2 25 序列 create sequence test sequence increment by 1 每次增加幾個 start wi...