Mysql 外來鍵與事務

2021-10-02 04:08:57 字數 2032 閱讀 8563

a.什麼是外來鍵

外來鍵約束是指有關聯的兩個資料表之間的跨表條件約束。

b.為什麼使用外來鍵 ?

1.保證主表和從表資料的合理性。

2.防止誤刪主表資料。

3.限制不合理資料插入從表。

a.外來鍵新增

語法:alter table 從表 add [constraint 約束名字] foreign key (外來鍵字段) references 主表(關聯字段) [操作];

b.外來鍵刪除

語法:alter table 從表 drop foreign key 約束名字;

c.外來鍵高階

語法:alter table 從表 add [constraint 約束名字] foreign key (外來鍵字段) references 主表(關聯字段)

[on delete ]

[on update ]

分為3個級別的操作:

1.嚴格限制:restrict。嚴格限制不允許任何操作。預設就是嚴格限制。

2.級聯操作:cascade。主表(關聯字段)更新或刪除時,從表也跟著改變。

3.置null:set null。主表(關聯字段)更新或刪除時,從表置null。

d.外來鍵注意事項

1. 2個表的引擎必須是innodb。

2. 2個表的關聯字段資料型別必須一致。

3. 建立外來鍵的字段必須是索引型別,如果不是,系統會自動建立。

4. 外來鍵約束是可以增強資料完整性,但在做insert、update、delete時,資料庫效能開銷成倍增加。

5. 外來鍵約束適用於中小應用系統。

6. 在大型應用系統中,一般不使用外來鍵約束。而考慮其他方式來增強資料完整性。

事務是一段連續的,不可分割sql語句;事務內的所有的sql語句,要不集體成功,要不集體失敗。如果存在部分成功,但是另一部分失敗,應該將成功對資料的影響去除(回滾)!

事務的目的是保證 mysql資料庫中的資料完整性:乙個事務(一件事)內的所有的sql,都處理統一的狀態(成功 or 失敗)。如果其中部分失敗,則回滾到 所有sql執行之前的狀態!

所以:事務是資料完整性(安全性)的乙個保證技術!

**使用事務技術的前提:資料表的引擎必須是 innodb 儲存引擎!

a.開啟事務 start transaction

開啟事務以後,所有執行的操作都是臨時性的,只有提交事務以後才會永久性更新到資料庫中。如果期間有錯誤,還可以回撤所有的操作,稱為事務回滾。

b.提交事務 commit

如果操作全部執行成功:意味著,事務內所有的任務都正確完成!該操作成功。應該將事務中所處理的資料,持久化(同步)到真實的表中!就可以使用提交事務命令:

語法: commit

c.事務回滾 rollback

如果事務中的sql語句出現了錯誤的操作,應該將其它已經成功的語句產生的影響撤銷,回到事務開始前的狀態!使用語句: rollback 即可完成!

語法: rollback

事務的四個特性:原子性,一致性,隔離性,永續性!

1)原子性(atomicity)

事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

2)一致性(consistency)

事務前後資料的完整性必須保持一致。

3)隔離性(isolation)

多個使用者併發訪問資料庫時,乙個使用者的事務不能被其它使用者的事物所干擾,多個併發事務之間的資料要相互隔離。

4)永續性(durability)

乙個事務一旦被提交,它對資料庫中的資料改變就是永久性的。

實體與實體之間的對應關係,稱之為實體間關係。
a.一對一

一對一的實體關係往往通過相同的主鍵來實現。

b.一對多

一對多關係一般通過在多的一端新增乙個字段儲存少的一端的主鍵來解決。

c.多對多

多對多關係一般通過建立中間表來實現。

mysql約束與外來鍵 MySQL 外來鍵與約束

外來鍵的建立 建表如下 create table parent id int not null,primary key id type innodb create table child id int,parent id int,foreign key parent id references pa...

Mysql 主鍵與外來鍵

這的pri和mul的含義是什麼意思呢?1.如果key是空的,那麼該列值的可以重複,表示該列沒有索引,或者是乙個非唯一的復合索引的非前導列 2.如果key是pri,那麼該列是主鍵的組成部分 3.如果key是uni,那麼該列是乙個唯一值索引的第一列 前導列 並別不能含有空值 null 4.如果key是m...

mysql 外來鍵 del 記錄 MySQL 外來鍵

在mysql中 1 mysql 資料表主要支援六種型別 分別是 bdb heap isam merge myisam innobdb。這六種又分為兩類,一類是 事務安全型 transaction safe 包括bdb和innodb 其餘都屬於第二類,稱為 非事務安全型 non transaction...