一个表有一列引用另一个作为复合主键的表列。 我该如何编写查询? 它显示了这个错误。我该如何解决呢。
错误1050:无法创建表'recdesk。#sql-5e8_33'(错误号:150)
SQL语句:
ALTER TABLE `recdesk`.`facility`
CHANGE COLUMN `organization_id` `organization_id` INT(11) NOT NULL DEFAULT 0,
CHANGE COLUMN `facility_id` `facility_id` INT(11) NOT NULL DEFAULT 0,
ADD CONSTRAINT `fk_organization_id`
FOREIGN KEY (`organization_id` )
REFERENCES `recdesk`.`facility_type` (`organization_id` )
ON DELETE RESTRICT
ON UPDATE RESTRICT,
ADD CONSTRAINT `fk_facility_type_id`
FOREIGN KEY (`facility_type_id` )
REFERENCES `recdesk`.`facility_type` (`facility_type_id` )
ON DELETE RESTRICT
ON UPDATE RESTRICT
, ADD INDEX `fk_organization_id_idx` (`organization_id` ASC)
, ADD INDEX `fk_facility_type_id_idx` (`facility_type_id` ASC)
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'facility' already exists
SQL Statement:
CREATE TABLE `facility` (
`organization_id` int(11) NOT NULL,
`facility_id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`address_line1` varchar(50) DEFAULT NULL,
`address_line2` varchar(50) DEFAULT NULL,
`city` varchar(30) DEFAULT NULL,
`state` varchar(2) DEFAULT NULL,
`zip_code` varchar(9) DEFAULT NULL,
`description` varchar(1000) DEFAULT NULL,
`note` varchar(250) DEFAULT NULL,
`capacity` smallint(6) DEFAULT NULL,
`show_on_portal` char(1) DEFAULT NULL,
`active_indicator` char(1) DEFAULT NULL,
`primary_facility_indicator` char(1) DEFAULT NULL,
`facility_type_id` int(11) DEFAULT NULL,
`parent_facility_id` int(11) DEFAULT NULL,
`create_date` datetime DEFAULT NULL,
`show_schedule_on_portal` char(1) DEFAULT NULL,
`show_usage_on_portal` char(1) DEFAULT NULL,
`enable_online_reservation` char(1) DEFAULT NULL,
`gl_code_id` int(11) DEFAULT NULL,
`gl_code_deposit_id` int(11) DEFAULT NULL,
PRIMARY KEY (`organization_id`,`facility_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
答案 0 :(得分:3)
如果表(Organization_ID, Facility_ID)
中的列Facility
对是表(Organization_ID, Facility_ID)
中的一对列Facility_Type
的外键引用,那么这是唯一的键入Facility_Type
,然后您需要创建一个外键约束:
ALTER TABLE `recdesk`.`facility`
CHANGE COLUMN `organization_id` `organization_id` INT(11) NOT NULL DEFAULT 0,
CHANGE COLUMN `facility_id` `facility_id` INT(11) NOT NULL DEFAULT 0,
ADD CONSTRAINT `fk_facility_type`
FOREIGN KEY (`organization_id`, `facility_type`)
REFERENCES `recdesk`.`facility_type` (`organization_id`, `facility_type`)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
ADD INDEX `fk_facility_type_idx` (`organization_id` ASC, `facility_type` ASC)
这是推断的语法,未经测试,但它应该接近您所需要的,假设MySQL中没有禁止复合外键的意外限制。
这个概念是您需要一个外键引用,它指定Facility
表中引用引用表中匹配列的两列。索引也需要在列对上,而不是在一列上。
答案 1 :(得分:0)
错误是
ERROR 1050: Table 'facility' already exists
您需要在执行创建脚本之前删除该表。