2011-12-29 123 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);