请问为什么MySQL导出的sql里的表格先后顺序不受外键限制?

bigbro001 2012-04-13 01:18:17
用MySQL5.5导出了一个数据库中的表格,发现生成的sql语句中的表格是按照字母表顺序排列的,请问为什么这些表格不受外键制约呢?

换句话说,含有外键的表格怎么可能比主表格先生成呢?

...全文
385 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangiyeng 2014-06-17
  • 打赏
  • 举报
回复
有的 /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS
bigbro001 2012-04-13
  • 打赏
  • 举报
回复
而且以上脚本中并没有set check off之类的语句,实在是怪异啊,一个还未存在的表格,是怎样能够使用的呢?
bigbro001 2012-04-13
  • 打赏
  • 举报
回复
多谢楼上的大侠,可是为什么如下sql中,第一段生成Assignment的语句里,用到了后面还未生成的表格Project和Employee呢?连表格都没有生成,又如何可以生成外键呢?

可是如下代码却的确可以执行,没有报错,为什么会有这种怪异现象呢?


-- MySQL dump 10.13 Distrib 5.5.15, for Win32 (x86)
--
-- Host: localhost Database: pmdata
-- ------------------------------------------------------
-- Server version 5.5.16

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `pmdata`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `pmdata` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `pmdata`;

--
-- Table structure for table `assignment`
--

DROP TABLE IF EXISTS `assignment`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `assignment` (
`EmployeeID` int(10) unsigned NOT NULL,
`ProjectID` int(10) unsigned NOT NULL,
`FromDate` date NOT NULL,
`ToDate` date DEFAULT NULL,
PRIMARY KEY (`EmployeeID`,`ProjectID`),
KEY `ProjectID` (`ProjectID`),
CONSTRAINT `Assignment_ibfk_1` FOREIGN KEY (`ProjectID`) REFERENCES `project` (`ProjectID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `Assignment_ibfk_2` FOREIGN KEY (`EmployeeID`) REFERENCES `employee` (`EmployeeID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `assignment`
--

LOCK TABLES `assignment` WRITE;
/*!40000 ALTER TABLE `assignment` DISABLE KEYS */;
/*!40000 ALTER TABLE `assignment` ENABLE KEYS */;
UNLOCK TABLES;

DROP TABLE IF EXISTS `employee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `employee` (
`EmployeeID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`HireDate` date NOT NULL,
`LeaveDate` date DEFAULT NULL,
`Position` varchar(50) NOT NULL,
`Title` varchar(50) NOT NULL,
PRIMARY KEY (`EmployeeID`)
) ENGINE=InnoDB AUTO_INCREMENT=500001 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `employee`
--

LOCK TABLES `employee` WRITE;
/*!40000 ALTER TABLE `employee` DISABLE KEYS */;
/*!40000 ALTER TABLE `employee` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `project`
--

DROP TABLE IF EXISTS `project`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `project` (
`ProjectID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`CustomerID` int(10) unsigned NOT NULL,
`CustomerContactID` int(10) unsigned NOT NULL,
`Name` varchar(50) NOT NULL,
PRIMARY KEY (`ProjectID`) USING BTREE,
KEY `CustomerID` (`CustomerID`),
KEY `Project_ibfk_2` (`CustomerContactID`),
CONSTRAINT `Project_ibfk_1` FOREIGN KEY (`CustomerID`) REFERENCES `customer` (`CustomerID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `Project_ibfk_2` FOREIGN KEY (`CustomerContactID`) REFERENCES `customercontact` (`CustomerContactID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=500001 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `project`
--

LOCK TABLES `project` WRITE;
/*!40000 ALTER TABLE `project` DISABLE KEYS */;
/*!40000 ALTER TABLE `project` ENABLE KEYS */;
UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2012-04-13 11:16:10
rucypli 2012-04-13
  • 打赏
  • 举报
回复
mysql只是顺序dump出数据,不关心数据是否以来

导入的时候可以先set global foreign_key_checks=off;

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧