標題:
11-2-2 建立資料表關聯性
[打印本頁]
作者:
小誌
時間:
2011-4-23 23:44
標題:
11-2-2 建立資料表關聯性
11-2-2 建立資料表關聯性
了解了MainTitle(主標題)資料表與SubTitle(次標題)資料表中『主編號』、『次編號』的對應關係後,我們就來進行MainTitle(主標題)資料表與SubTitle(次標題)資料表的『關聯性』設定!現在筆者就為您簡介一下如何使用phpMyAdmin為MySQL資料庫中的資料表建立關聯性。
要使用phpMyAdmin為MySQL資料庫中的資料表建立關聯性之前,先來解決一下「管理」功能中「關聯資料表的附加功能未能啟動, 請按此查出問題原因.」的問題,選定資料庫後,按下「管理」超連結圖示:
[attach]5773[/attach]
圖11-24 資料表關聯功能無法使用。
頁面最下方,出現錯誤訊息:「關聯資料表的附加功能未能啟動, 請按此查出問題原因.」,這是因為要使用phpMyAdmin來建立資料表關聯必須有記錄關聯性的資料庫存在,phpMyAdmin必須利用這些記錄來啟動管理關聯資料表的附加功能,解決方法與步驟如下:
1、開啟phpMyAdmin的設定檔「config.inc.php」。
2、將相關組態更改設定如下:
$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';
複製代碼
[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指令輸入的文字方塊中輸入下列指令,並按下「執行」按鈕以便建立與步驟組態設定相對應的資料表:
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';
複製代碼
作者:
小誌
時間:
2011-4-23 23:46
6、步驟5的指令執行後將於步驟3所建立的「phpmyadmin」資料庫中新增7個資料表:
[attach]5777[/attach]
圖11-28 「phpmyadmin」資料庫中新增7個資料表。
提示!!
在範例光碟\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 關聯欄位設定。
ON DELETE、ON UPDATE欄位
當我們選取「CASCADE」:
串接更新(UPDATE)相關欄位:當MainTitle(主標題)資料表中的主編號欄位資料值改變時,SubTitle(次標題)資料表中相對應的主編號欄位值也會跟著一起變更。
串接刪除(DELETE)相關紀錄:當MainTitle(主標題)資料表中的某一筆資料錄被刪除時,假設其主編號欄位值為1,則SubTitle(次標題)資料表中相對應主編號欄位值為1的資料錄也會全部被自動刪除。
作者:
小誌
時間:
2011-4-23 23:51
4、設定好相關的關聯欄位資訊後,按下圖11-31中的「執行」按鈕即完成MainTitle(主標題)、SubTitle(次標題)資料表的關連性設定,此關聯性的設定步驟等同執行下列的SQL命令:
ALTER TABLE `subtitle`
ADD CONSTRAINT `subtitle_ibfk_1`
FOREIGN KEY (`主編號`)
REFERENCES `maintitle` (`主編號`)
ON DELETE CASCADE ON UPDATE CASCADE;
複製代碼
提示!!
建立資料表的關聯性就是建立資料表間的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
沒辦法建立資料庫
請問是哪一段錯了呢
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)