получить структуру таблицы mysql с помощью php

У меня есть скрипт, который берет базу данных и генерирует экспортный запрос для базы данных в качестве резервной копии. Мне нужен этот скрипт для цели. Мой php-код:

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

в базе 17 таблиц. Я запускаю цикл for для всех 17 таблиц. Я получаю запрос на создание таблицы с внешним ключом, который мне не нужен. Он возвращается как-

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 без внешнего ключа? подобно-

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;

person Imrul.H    schedule 29.12.2011    source источник
comment
Вы исследовали какие-либо инструменты резервного копирования баз данных, которые уже существуют, вместо того, чтобы пытаться изобретать велосипед? Вы можете использовать собственную репликацию MySQL для резервного копирования вместе с такими программами, как mysqldump или mysqlhotcopy.   -  person liquorvicar    schedule 29.12.2011


Ответы (2)


Отключите внешние ключи во время создания ваших таблиц.

SET FOREIGN_KEY_CHECKS=0

CREATE TABLE a
CREATE TABLE b
...

Включить ключи снова

SET FOREIGN_KEY_CHECKS=1
person Henrik    schedule 29.12.2011

Вы можете отключить проверку внешних ключей, как это было предложено в другом месте. Если вы действительно хотите удалить ограничения из операторов CREATE TABLE, можно использовать следующий код, который предполагает, что $createSql будет содержать оператор CREATE TABLE SQL:

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