我有一个脚本,它接受数据库并为数据库生成类似查询的导出作为备份。我出于某种目的需要这个脚本。我的PHP代码是:
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没有外键?像 -
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 :(得分:3)
在创建表格时禁用外键。
SET FOREIGN_KEY_CHECKS=0
CREATE TABLE a
CREATE TABLE b
...
再次启用密钥
SET FOREIGN_KEY_CHECKS=1
答案 1 :(得分:0)
您可以按照别处的建议禁用外键检查。如果您确实要从CREATE TABLE
语句中删除约束,则可以使用以下代码,它假定$createSql
将包含CREATE TABLE
SQL语句:
$createSql = preg_replace('/CONSTRAINT[^\n]+/im', '', $createSql);
$createSql = preg_replace('/,\s+\)/im', "\n)", $createSql);