sql中的參照完整性(一對一,一對多,多對多)

2021-09-17 21:16:35 字數 3613 閱讀 8985

一、參照完整性

參照完整性指的就是多表之間的設計,主要使用外來鍵約束。

多表設計: 一對多、多對多、一對一設計

1.一對多

關聯主要語句:

constraint cus_ord_fk foreign key (customer_id) references customer(id)

建立客戶表——訂單表

乙個客戶可以訂多份訂單,每份訂單只能有乙個客戶。

-- 關聯(1對n)

create

table customer(

id int

primary

keyauto_increment

, name varchar(20

)not

null

, adress varchar(20

)not

null);

create

table orders(

order_num varchar(20

)primary

key,

price float

notnull

, customer_id int

,-- 進行和customer 關聯的字段 外來鍵

constraint cus_ord_fk foreign

key(customer_id)

references customer(id));

insert

into customer(name,adress)

values

("zs"

,"北京");

insert

into customer(name,adress)

values

("ls"

,"上海");

notice: constraint: 約束的意思。foreign key: 外來鍵。references: 參照

建立乙個名叫customer_id_fk的外來鍵約束,其中外鍵指的是customer_id,並且參照的是 customers表中的id列

擴充套件:字表的刪除更新策略:

1)cascade 級聯策略。使用此種策略時主表的記錄被刪除或者主鍵欄位被修改時會同步刪除或修改子表

2) no action 無動作策略。使用此種策略時要刪除主表必須先刪除子表,要刪除主表的記錄必須先刪除子表關聯的記錄,不能更新主表主鍵欄位的值。

3) rstrict 主表約束策略。此種策略對主表的約束跟 no action 一樣

4)set no 置空策略。使用此種策略時,如果主表被刪除或者主鍵被更改,則將子表中的外來鍵設定為null。需要注意的是,如果子表的外來鍵是主鍵或者是設定為not null的,則主表的刪除和主鍵的更改跟 no action 一樣。

2. 多對多

建立學生——老師關係**

其中乙個學生可以有多個老師,一位老師也可以有多個學生

-- 多對多關係

-- 建立teacher**

create

table teacher (

id int

, name varchar(20

)not

null

, gender char(2

)not

null

,primary

key(id));

-- 建立學生**

create

table student (

id int

, name varchar(20

)not

null

, age int

notnull);

alter

table student add

primary

key(id)

;-- 第三張關係表

attention:多對多是三張表,第三張表建立外來鍵約束對應前兩張表中的id

3. 一對一

兩種形式:

1)按照外來鍵關聯

在idcard表中的外來鍵新增唯一約束

2)按照主鍵關聯

對主鍵新增外來鍵約束

-- 一對一

-- 建立users**

create

table users (

id int

, name varchar(20

)not

null

, gender char(2

)not

null

,primary

key(id));

-- 建立card **

create

table card (

id int

, adress varchar

(100

)not

null

, user_id int

unique

,constraint users_id_fk foreign

key(user_id)

references users(id));

alter

table card add

primary

key(id)

;

此種為方法1,給外來鍵新增唯一約束uniqu

JavaWeb mybatis一對一 一對多查詢

mybatis查詢基本返回資料基本用到的都是resulttype與resultmap,resulttype必須po類與sql欄位一致,而resultmap可以不一致通過配置對映。本篇文章一是要講解resulttype與resultmap如何使用 二是重點講解一對一與一對多查詢resultmap的使用...

mybatis之一對一,一對多

resulttype 直接表示返回型別 基本資料型別 引用資料型別 resultmap 對外部resultmap 資料庫字段資訊和物件屬性不一樣 複雜的聯合查詢,自由控制對映結果 注 它們兩個不能同時存在 association select from class c,teacher t where...

表關係 一對一,一對多,多對多

可以在資料庫圖表中的表之間建立關係,以顯示乙個表中的列與另乙個表中的列是如何相鏈結的。更好的方法是將有關出版社的資訊在單獨的表,publishers,中只儲存一次。然後可以在titles表中放置乙個引用出版社表中某項的指標。為了確保您的資料同步,可以實施titles和publishers之間的參照完...