Board logo

標題: 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、將相關組態更改設定如下:
  1. $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
  2. $cfg['Servers'][$i]['bookmarktable'] = 'bookmark';
  3. $cfg['Servers'][$i]['relation'] = 'relation';
  4. $cfg['Servers'][$i]['table_info'] = 'table_info';
  5. $cfg['Servers'][$i]['table_coords'] = 'table_coords';
  6. $cfg['Servers'][$i]['pdf_pages'] = 'pdf_pages';
  7. $cfg['Servers'][$i]['column_info'] = 'column_info';
  8. $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指令輸入的文字方塊中輸入下列指令,並按下「執行」按鈕以便建立與步驟組態設定相對應的資料表:
  1. CREATE TABLE `bookmark` (
  2. `id` int(11) NOT NULL auto_increment,
  3. `dbase` varchar(255) NOT NULL default '',
  4. `user` varchar(255) NOT NULL default '',
  5. `label` varchar(255) NOT NULL default '',
  6. `query` text NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) TYPE=MyISAM COMMENT='Bookmarks' AUTO_INCREMENT=1 ;


  9. CREATE TABLE `column_info` (
  10. `id` int(5) unsigned NOT NULL auto_increment,
  11. `db_name` varchar(64) NOT NULL default '',
  12. `table_name` varchar(64) NOT NULL default '',
  13. `column_name` varchar(64) NOT NULL default '',
  14. `comment` varchar(255) NOT NULL default '',
  15. `mimetype` varchar(255) NOT NULL default '',
  16. `transformation` varchar(255) NOT NULL default '',
  17. `transformation_options` varchar(255) NOT NULL default '',
  18. PRIMARY KEY (`id`),
  19. UNIQUE KEY `db_name` (`db_name`,`table_name`,`column_name`)
  20. ) TYPE=MyISAM COMMENT='Comments for Columns' AUTO_INCREMENT=24 ;

  21. CREATE TABLE `history` (
  22. `id` bigint(20) unsigned NOT NULL auto_increment,
  23. `username` varchar(64) NOT NULL default '',
  24. `db` varchar(64) NOT NULL default '',
  25. `table` varchar(64) NOT NULL default '',
  26. `timevalue` timestamp(14) NOT NULL,
  27. `sqlquery` text NOT NULL,
  28. PRIMARY KEY (`id`),
  29. KEY `username` (`username`,`db`,`table`,`timevalue`)
  30. ) TYPE=MyISAM COMMENT='SQL history' AUTO_INCREMENT=1 ;

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

  38. CREATE TABLE `relation` (
  39. `master_db` varchar(64) NOT NULL default '',
  40. `master_table` varchar(64) NOT NULL default '',
  41. `master_field` varchar(64) NOT NULL default '',
  42. `foreign_db` varchar(64) NOT NULL default '',
  43. `foreign_table` varchar(64) NOT NULL default '',
  44. `foreign_field` varchar(64) NOT NULL default '',
  45. PRIMARY KEY (`master_db`,`master_table`,`master_field`),
  46. KEY `foreign_field` (`foreign_db`,`foreign_table`)
  47. ) TYPE=MyISAM COMMENT='Relation table';

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

  56. CREATE TABLE `table_info` (
  57. `db_name` varchar(64) NOT NULL default '',
  58. `table_name` varchar(64) NOT NULL default '',
  59. `display_field` varchar(64) NOT NULL default '',
  60. PRIMARY KEY (`db_name`,`table_name`)
  61. ) 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」:

作者: 小誌    時間: 2011-4-23 23:51

4、設定好相關的關聯欄位資訊後,按下圖11-31中的「執行」按鈕即完成MainTitle(主標題)、SubTitle(次標題)資料表的關連性設定,此關聯性的設定步驟等同執行下列的SQL命令:
  1. ALTER TABLE `subtitle`
  2. ADD CONSTRAINT `subtitle_ibfk_1`
  3. FOREIGN KEY (`主編號`)
  4. REFERENCES `maintitle` (`主編號`)
  5. 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/)