用MySQL5.5导出了一个数据库中的表格,发现生成的sql语句中的表格是按照字母表顺序排列的,请问为什么这些表格不受外键制约呢?换句话说,含有外键的表格怎么可能比主表格先生成呢?

解决方案 »

  1.   

    mysql只是顺序dump出数据,不关心数据是否以来导入的时候可以先set global foreign_key_checks=off;
      

  2.   

    多谢楼上的大侠,可是为什么如下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
      

  3.   

    而且以上脚本中并没有set check off之类的语句,实在是怪异啊,一个还未存在的表格,是怎样能够使用的呢?
      

  4.   

    有的
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS