2013-04-22 42 views
1

我正在使用MySQL创建一个小型数据库。并面临外键和主键的一些问题。我真的不明白,因为这似乎是一个简单的问题。创建外键约束时发生MYSQL错误

CREATE TABLE IF NOT EXISTS `db_trimms`.`urban_area` (
    `area_id` INT(10) NOT NULL , 
    `city` VARCHAR(60) NOT NULL , 
    `state` VARCHAR(60) NOT NULL , 
    `urban_area` VARCHAR(60) NOT NULL , 
    `census_region` VARCHAR(60) NOT NULL , 
    `area_no` VARCHAR(60) NOT NULL , 
    `freeway_speed` VARCHAR(60) NOT NULL , 
    `arterial_speed` VARCHAR(60) NOT NULL , 
    PRIMARY KEY (`area_id`)) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = latin1; 

其运行成功。不过,虽然创建另一个表和创建外键参照上表...它创造问题的area_id ...

#1005 - Can't create table 'db_trimms.emiss_others_offpeak' (errno: 150) (Details...) 

,这里是查询

CREATE TABLE IF NOT EXISTS `db_trimms`.`emiss_others_offpeak` (
    `area_id` INT(10) UNSIGNED NOT NULL , 
    `ammonia` VARCHAR(60) NOT NULL , 
    `atm_carbon_dio` VARCHAR(60) NOT NULL , 
    `carbon_dio_equiv` VARCHAR(60) NOT NULL , 
    `carbon_mono` VARCHAR(60) NOT NULL , 
    `methane` VARCHAR(60) NOT NULL , 
    `nitrogen_dio` VARCHAR(60) NOT NULL , 
    `nitrogen_oxide` VARCHAR(60) NOT NULL , 
    `nitrous_oxide` VARCHAR(60) NOT NULL , 
    `non_meth_hydrocarbs` VARCHAR(60) NOT NULL , 
    `oxides_of_nitrogen` VARCHAR(60) NOT NULL , 
    `particulate_matter_pm10` VARCHAR(60) NOT NULL , 
    `particulate_matter_pm2_5` VARCHAR(60) NOT NULL , 
    `sulfate` VARCHAR(60) NOT NULL , 
    ` sulfur_dioxide` VARCHAR(60) NOT NULL , 
    `total_hydrocarbon` VARCHAR(60) NOT NULL , 
    `vol_org_comp` VARCHAR(60) NOT NULL , 
    PRIMARY KEY (`area_id`) , 
    CONSTRAINT `fk_others_offpeak_urban` 
    FOREIGN KEY (`area_id`) 
    REFERENCES `db_trimms`.`urban_area` (`area_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = latin1; 
+0

我不认为你可以做一个外键引用到另一个数据库。 – 2013-04-22 15:51:45

+0

其相同的数据库'db_trimms' – 2013-04-22 15:53:30

回答

1

的数据类型不兼容与彼此。从表urban_area制作列area_idUNSIGNED

`area_id` INT(10) UNSIGNED NOT NULL , 
+0

完美.....它工作....非常感谢.... :) – 2013-04-22 16:00:11

+0

不客气':D' – 2013-04-22 16:00:28