亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

MySQL數據庫中的外鍵約束詳解

添加時間:2014-2-23 17:28:28  添加: 思海網絡 

  使用MySQL開發過數據庫驅動的小型web應用程序的人都知道,對關系數據庫的表進行創建、檢索、更新和刪除等操作都是些比較簡單的過程。理論上,只要掌握了最常見的SQL語句的用法,并熟悉您選擇使用的服務器端腳本語言,就足以應付對MySQL表所需的各種操作了,尤其是當您使用了快速MyISAM數據庫引擎的時候。但是,即使在最簡單的情況下,事情也要比我們想象的要復雜得多。下面我們用一個典型的例子進行說明。假設您正在運行一個博客網站,您幾乎天天更新,并且該站點允許訪問者評論您的帖子。

  在這種情況下,我們的數據庫模式至少應該包括兩個MyISAM表,一個用于存放您的博客文章,另一個來處理訪問者的評論。很明顯,這兩個表之間存在一個一對多的關系,所以我們要在第二個表中定義一個外鍵,以便在更新或者刪除數據行時可以保持數據庫的完整性。

  像上面這樣的應用程序,不僅維護兩個表的完整性是一個嚴峻的挑戰,而最大的難點在于我們必須在應用程序級別來維護它們的完整性。這是大部分不要求使用事務的web項目在開發期間所采取的方法,因為MyISAM表可以提供出色的性能。

  當然,這樣做也是有代價的,正如我前面所說的,應用程序必須維護數據庫的完整性和一致性,這就意味著要實現更復雜的程序設計邏輯來處理各個表之間的關系。雖然可以通過使用抽象層和ORM模塊來簡化數據庫訪問,但是隨著應用程序所需數據表的數量的增加,處理它們所需的邏輯無疑也會隨之變得越發復雜。

  那么,對于MySQL來說,有沒有數據庫級別的外鍵處理方式來幫助維護數據庫完整性的呢? 幸運的是,答案是肯定的!MySQL還可以支持InnoDB表,使我們可以通過一種非常簡單的方式來處理外鍵約束。這個特性允許我們可以觸發器某些動作,諸如更新和刪掉表中的某些數據行以維護預定義的關系。

  凡事有利皆有弊,使用InnoDB表的主要缺點是它們的速度要比MyISAM慢,尤其是在必須查詢許多表的大規模應用程序中,這一點尤為明顯。好在較新版本MySQL的MyISAM表也已支持外鍵約束。

  本文將介紹如何將外鍵約束應用于InnoDB表。此外,我們還將使用一個簡單的基于PHP的MySQL抽象類來創建有關的示例代碼;當然,您也可以使用自己喜歡的其它服務器端語言。現在,我們開始介紹如何將外鍵約束應用于MySQL。

  使用外鍵約束的時機

  老實說,在MySQL中使用InnoDB表的時候,不一定非用外鍵約束不可,然而,為了外鍵約束在某些情況下的功用,我們將通過前面提到的例子的代碼進行具體說明。它包括兩個MyISAM表,分別用于存放博客文章和評論。

  定義數據庫模式時,我們要在這兩個表之間建立起一對多的關系,方法是在存放評論的表中創建一個外鍵,以將其中的數據行(即評論)對應到特定的博客文章。下面是創建示例MyISAM表的基本SQL代碼:

  

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,

PRIROSE KEY (`id`)

) ENGINE=MyISAM 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,

PRIROSE KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

關鍵字:數據庫、服務器、MySQL

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站