2011-12-29 40 views
0

我有一個腳本,它需要一個數據庫併爲數據庫生成類似查詢的導出作爲備份。我需要這個腳本來達到目的。我的php代碼是:使用php獲取mysql表結構

mysql_query("SHOW CREATE TABLE `myTable`"); 

在數據庫中有17個表。我正在爲所有17個表運行for循環。我用我不想要的外鍵創建表查詢。它返回類似於 -

CREATE TABLE `customers` (
    `person_id` int(10) NOT NULL, 
    `account_number` varchar(255) DEFAULT NULL, 
    `taxable` int(1) NOT NULL DEFAULT '1', 
    `deleted` int(1) NOT NULL DEFAULT '0', 
    UNIQUE KEY `account_number` (`account_number`), 
    KEY `person_id` (`person_id`), 
    CONSTRAINT `customers_ibfk_1` FOREIGN KEY (`person_id`) REFERENCES `people` (`person_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

由於外鍵,它在運行查詢創建表時會收到錯誤。有沒有辦法獲得沒有外鍵的SQL? like-

CREATE TABLE IF NOT EXISTS `customers` (
    `person_id` int(10) NOT NULL, 
    `account_number` varchar(255) DEFAULT NULL, 
    `taxable` int(1) NOT NULL DEFAULT '1', 
    `deleted` int(1) NOT NULL DEFAULT '0', 
    UNIQUE KEY `account_number` (`account_number`), 
    KEY `person_id` (`person_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
+0

你有沒有調查任何數據庫備份工具是在那裏已經而不是試圖重新發明輪子?您可以將MySQL的本地複製與mysqldump或mysqlhotcopy等程序一起用於備份。 – liquorvicar 2011-12-29 13:30:18

回答

3

創建表時禁用外鍵。

SET FOREIGN_KEY_CHECKS=0 

CREATE TABLE a 
CREATE TABLE b 
... 

啓用鍵再次

SET FOREIGN_KEY_CHECKS=1 
0

其他地方建議您可以禁用外鍵檢查。如果你真的想從CREATE TABLE語句可以用下面的代碼刪除的約束,它假定$createSql將包含CREATE TABLE SQL語句:

$createSql = preg_replace('/CONSTRAINT[^\n]+/im', '', $createSql); 
$createSql = preg_replace('/,\s+\)/im', "\n)", $createSql);