玩轉MySQL中的外來鍵約束之PHP篇

2022-04-08 18:53:05 字數 2343 閱讀 9441

在本文中,我們將學習如何通過php 5的乙個基本抽象類使用外來鍵約束來更新兩個innodb表的資料。 我們將通過具體示例來說明如何通過伺服器端指令碼語言來使用外來鍵約束。

一、利用外來鍵約束更新mysql中的資料

現在,最流行的開源關係型資料庫管理系統非mysql莫屬,而mysql又支援多個儲存引擎,其中預設的也是速度較快的儲存引擎為myisam,對許多讀者來說,在開發自己資料庫驅動的web應用程式之前,可能已經使用了它很長一段時間了。

然而,有時候我們的專案可能需要額外的特性,例如需要處理外來鍵約束,這時我們就需要用到其它型別的mysql儲存引擎。在這種情況下,innodb表將非常適合我們的要求,儘管在效能方面可能比myisam表要稍遜一籌。大家知道,使用innodb表外來鍵約束主要優點之一就是,它使我們可以在資料庫級別處理和維護多個表之間的關係,而無需將此任務推給與這些表打交道的應用程式的某些模組或者程式庫。

當然,前面的幾篇文章中,我們已經就indodb表的外來鍵約束做過相應介紹,但是那裡都是通過手工方式來操作外來鍵約束的。在本文中,我們將說明如何在更新和刪除父表中的資料時,如何通過指令碼語言來觸發相應子表的級聯更新和刪除操作。

這裡,我們部落格應用程式的資料層由兩個表構成,在前面的示例中,對這些表的操作,都是通過手工鍵入sql命令完成的,現在,我們將介紹如何使用php程式語言來完成這些工作。之所以選擇php,是因為它目前mysql最常見的搭配語言,下面我們以php 5為例來說明如何外來鍵約束操作兩個innodb表。 通過閱讀本文,您將更加真切地體會到外來鍵約束的特性。

現在,我們開始見證php 5和外來鍵約束結合在一起所帶來的威力吧!

二、以級聯方式更新和刪除資料庫中的資料

古人云,溫故而知新,那麼先讓我們來回顧一下前面學過的內容吧。之前,我們介紹過如何運用外來鍵約束級聯更新和刪除存放部落格文章評論的innodb表中的資料。如果您尚未閱讀前面的文章也不要緊,下面我們簡單回顧這些內容。

這裡是我們的示例中用到的兩個表的定義,如下所示:

code highlighting produced by actipro codehighlighter (freeware)

drop table if exists `test`.`blogs`;

create table `test`.`blogs` (

`id` int(10) unsigned auto_increment,

`title` text,

`content` text,

`author` varchar(45) default null,

primary key (`id`)

) engine=innodb default charset=utf8;

drop table if exists `test`.`comments`;

create table `test`.`comments` (

`id` int(10) unsigned auto_increment,

`blog_id` int(10) unsigned default null,

`comment` text,

`author` varchar(45) default null,

primary key (`id`),

key `blog_ind` (`blog_id`),

constraint `comments_ibfk_1` foreign key (`blog_id`) references `blogs` (`id`) on delete cascade on update cascade

) engine=innodb default charset=utf8;

上面的**定義了兩個表,需要注意一下第二個,因為它為「blog_id」字段規定了乙個約束,所以當post表中的資料被更新和刪除時,將觸發相應的級聯操作。

為了幫您理解這一過程,我們可以在表中填上一些資料,這時可以通過sql語句insert來完成,如下:

code highlighting produced by actipro codehighlighter (freeware)

insert into blogs (id, title, content, author) values (null,title of the first blog entry, content of the first blog entry, ian)

insert into comments (id, blog_id, comment, author) values (null, 1, commenting first blog entry, tom), (null, 1, commenting first blog entry, rose)

現在,我們唯一的一條部落格資料已經有了兩條評論資料,如果由於任何原因需要更新部落格及其評論資料的話,可以通過下列命令完成:

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 外來鍵約束

建立測試主表.id 是主鍵.create table test main id int,value varchar 10 primary key id 建立測試子表.create table test sub id int,main id int,value varchar 10 primary k...

MySQL外來鍵約束

innodb型別表有乙個其他儲存引擎不支援的特性 外來鍵約束。當b表的外來鍵關聯到a表的主鍵時 表b是父表a表的子表 如果刪除了a表,那麼b中的外來鍵則仍然關聯著乙個不存在的表的主鍵。而外鍵約束則設定了當約束被破壞時應該應用的的規則,包括防止約束破壞。建立乙個外來鍵約束的語法是 foreign ke...