麻辣家族討論版版's Archiver

小誌 發表於 2011-4-23 23:44

11-2-2 建立資料表關聯性

[color=DarkRed][size=4][b]11-2-2   建立資料表關聯性[/b][/size][/color]
了解了MainTitle(主標題)資料表與SubTitle(次標題)資料表中『主編號』、『次編號』的對應關係後,我們就來進行MainTitle(主標題)資料表與SubTitle(次標題)資料表的『關聯性』設定!現在筆者就為您簡介一下如何使用phpMyAdmin為MySQL資料庫中的資料表建立關聯性。

要使用phpMyAdmin為MySQL資料庫中的資料表建立關聯性之前,先來解決一下「管理」功能中「關聯資料表的附加功能未能啟動, 請按此查出問題原因.」的問題,選定資料庫後,按下「管理」超連結圖示:
[attach]5773[/attach]
圖11-24   資料表關聯功能無法使用。

頁面最下方,出現錯誤訊息:「關聯資料表的附加功能未能啟動, 請按此查出問題原因.」,這是因為要使用phpMyAdmin來建立資料表關聯必須有記錄關聯性的資料庫存在,phpMyAdmin必須利用這些記錄來啟動管理關聯資料表的附加功能,解決方法與步驟如下:
1、開啟phpMyAdmin的設定檔「config.inc.php」。
2、將相關組態更改設定如下:[code]$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'bookmark';
$cfg['Servers'][$i]['relation'] = 'relation';
$cfg['Servers'][$i]['table_info'] = 'table_info';
$cfg['Servers'][$i]['table_coords'] = 'table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'column_info';
$cfg['Servers'][$i]['history'] = 'history';[/code][attach]5774[/attach]
圖11-25   「config.inc.php」設定。

3、利用phpMyAdmin建立一個名為「phpmyadmin」的資料庫。
[attach]5775[/attach]
圖11-26   建立「phpmyadmin」資料庫。

小誌 發表於 2011-4-23 23:45

4、參照圖11-26,按下「SQL」超連結圖示,出現SQL指令輸入的文字方塊畫面:
[attach]5776[/attach]
圖11-27   SQL指令輸入。

5、於SQL指令輸入的文字方塊中輸入下列指令,並按下「執行」按鈕以便建立與步驟組態設定相對應的資料表:[code]CREATE TABLE `bookmark` (
`id` int(11) NOT NULL auto_increment,
`dbase` varchar(255) NOT NULL default '',
`user` varchar(255) NOT NULL default '',
`label` varchar(255) NOT NULL default '',
`query` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM COMMENT='Bookmarks' AUTO_INCREMENT=1 ;


CREATE TABLE `column_info` (
`id` int(5) unsigned NOT NULL auto_increment,
`db_name` varchar(64) NOT NULL default '',
`table_name` varchar(64) NOT NULL default '',
`column_name` varchar(64) NOT NULL default '',
`comment` varchar(255) NOT NULL default '',
`mimetype` varchar(255) NOT NULL default '',
`transformation` varchar(255) NOT NULL default '',
`transformation_options` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`)
) TYPE=MyISAM COMMENT='Comments for Columns' AUTO_INCREMENT=24 ;

CREATE TABLE `history` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`username` varchar(64) NOT NULL default '',
`db` varchar(64) NOT NULL default '',
`table` varchar(64) NOT NULL default '',
`timevalue` timestamp(14) NOT NULL,
`sqlquery` text NOT NULL,
PRIMARY KEY (`id`),
KEY `username` (`username`,`db`,`table`,`timevalue`)
) TYPE=MyISAM COMMENT='SQL history' AUTO_INCREMENT=1 ;

CREATE TABLE `pdf_pages` (
`db_name` varchar(64) NOT NULL default '',
`page_nr` int(10) unsigned NOT NULL auto_increment,
`page_descr` varchar(50) NOT NULL default '',
PRIMARY KEY (`page_nr`),
KEY `db_name` (`db_name`)
) TYPE=MyISAM COMMENT='PDF Relationpages' AUTO_INCREMENT=3 ;

CREATE TABLE `relation` (
`master_db` varchar(64) NOT NULL default '',
`master_table` varchar(64) NOT NULL default '',
`master_field` varchar(64) NOT NULL default '',
`foreign_db` varchar(64) NOT NULL default '',
`foreign_table` varchar(64) NOT NULL default '',
`foreign_field` varchar(64) NOT NULL default '',
PRIMARY KEY (`master_db`,`master_table`,`master_field`),
KEY `foreign_field` (`foreign_db`,`foreign_table`)
) TYPE=MyISAM COMMENT='Relation table';

CREATE TABLE `table_coords` (
`db_name` varchar(64) NOT NULL default '',
`table_name` varchar(64) NOT NULL default '',
`pdf_page_number` int(11) NOT NULL default '0',
`x` float unsigned NOT NULL default '0',
`y` float unsigned NOT NULL default '0',
PRIMARY KEY (`db_name`,`table_name`,`pdf_page_number`)
) TYPE=MyISAM COMMENT='Table coordinates for phpMyAdmin PDF output';

CREATE TABLE `table_info` (
`db_name` varchar(64) NOT NULL default '',
`table_name` varchar(64) NOT NULL default '',
`display_field` varchar(64) NOT NULL default '',
PRIMARY KEY (`db_name`,`table_name`)
) TYPE=MyISAM COMMENT='Table information for phpMyAdmin';[/code]

小誌 發表於 2011-4-23 23:46

6、步驟5的指令執行後將於步驟3所建立的「phpmyadmin」資料庫中新增7個資料表:
[attach]5777[/attach]
圖11-28   「phpmyadmin」資料庫中新增7個資料表。

   [color=Red]提示!![/color]
在範例光碟\DataBase目錄中有一個MySQL資料庫「phpmyadmin」,檔案名稱為「phpmyadmin.sql」,請您將檔案複製到您的硬碟裡並使用phpMyAdmin將其載入到MySQL Server中,您可直接加以利用,但是步驟1、2仍須由您自己手動完成喔。
[attach]5778[/attach]

小誌 發表於 2011-4-23 23:48

解決了「關聯資料表的附加功能未能啟動, 請按此查出問題原因.」的問題後,我們接著來建立MainTitle資料表與SubTitle資料表的關連性:
1、選取BBS資料庫->點選SubTitle資料表項目上的「結構」超連結圖示:
[attach]5779[/attach]
圖11-29   查看SubTitle資料表的結構。

2、在查看SubTitle資料表的結構畫面中,會列出SubTitle資料表中全部欄位的相關資訊,在欄位資訊列表的下方有一個「關聯檢視」的超連結圖示項目,請點選該超連結圖示項目:
[attach]5780[/attach]
圖11-30  「關聯檢視」的超連結圖示項目。

3、進入SubTitle資料表的關聯檢視畫面後,在主編號欄位中:內部關聯選取「subtitle->主編號」,關聯欄位選取「maintitle->主編號」,ON DELETE、ON UPDATE欄位則選取「CASCADE」:
[attach]5781[/attach]
圖11-31  關聯欄位設定。

[color=Magenta]ON DELETE、ON UPDATE欄位[/color]
當我們選取「CASCADE」:
[list]
[*]串接更新(UPDATE)相關欄位:當MainTitle(主標題)資料表中的主編號欄位資料值改變時,SubTitle(次標題)資料表中相對應的主編號欄位值也會跟著一起變更。
[*]串接刪除(DELETE)相關紀錄:當MainTitle(主標題)資料表中的某一筆資料錄被刪除時,假設其主編號欄位值為1,則SubTitle(次標題)資料表中相對應主編號欄位值為1的資料錄也會全部被自動刪除。
[/list]

小誌 發表於 2011-4-23 23:51

4、設定好相關的關聯欄位資訊後,按下圖11-31中的「執行」按鈕即完成MainTitle(主標題)、SubTitle(次標題)資料表的關連性設定,此關聯性的設定步驟等同執行下列的SQL命令:[code]ALTER TABLE `subtitle`
ADD CONSTRAINT `subtitle_ibfk_1`
FOREIGN KEY (`主編號`)
REFERENCES `maintitle` (`主編號`)
ON DELETE CASCADE ON UPDATE CASCADE;[/code][b][color=Red] 提示!![/color][/b]
建立資料表的關聯性就是建立資料表間的FOREIGN KEY條件約束,父資料表(主標題資料表)中用來建立關聯性的欄位稱之為外部索引鍵(Foreign Key),又稱外來鍵,而子資料表(次標題資料表)中用來建立關聯性的欄位稱之為主索引鍵(Primary Key);建立資料關聯性的目的是為了維護資料表間的「參考完整性(Referential Integrity)」。


5、選取phpmyadmin資料庫->點選realation資料表->點選「瀏覽」超連結圖示,您將發現我們剛剛建立的資料表關聯資訊被記錄在其中:
[attach]5782[/attach]
圖11-32  查看資料表關聯資訊。

dummytrue 發表於 2014-8-31 11:16

想請問一下
再匯入phpmyadmin資料表時
我用的是SQL語法
可是卻跑出

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM COMMENT='Bookmarks' AUTO_INCREMENT=1' at line 8
沒辦法建立資料庫
請問是哪一段錯了呢

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供