2016-08-16 9 views
0

MySQL Workbenchのモデル作成者からデータベースモデルを作成しました。しかし、SQLファイルに変換しようとすると、エラーコードが出てきます。エラーはここエラー:150/MySQL 'テーブルを作成できません'

Can't create table project2i2w . customer (error: 150 "Foreign key constraint is incorrectly formed") 0.032 sec.

を言う私のスクリプトです:

-- MySQL Workbench Forward Engineering 

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

-- ----------------------------------------------------- 
-- Schema project2i2w 
-- ----------------------------------------------------- 
DROP SCHEMA IF EXISTS `project2i2w` ; 

-- ----------------------------------------------------- 
-- Schema project2i2w 
-- ----------------------------------------------------- 
CREATE SCHEMA IF NOT EXISTS `project2i2w` DEFAULT CHARACTER SET utf8 ; 
USE `project2i2w` ; 

-- ----------------------------------------------------- 
-- Table `project2i2w`.`services` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `project2i2w`.`services` (
    `service_id` INT NOT NULL AUTO_INCREMENT, 
    `service_name` VARCHAR(50) NOT NULL, 
    `service_desc` VARCHAR(250) NOT NULL, 
    `os_id` INT NOT NULL, 
    `customer_id` INT NOT NULL, 
    PRIMARY KEY (`service_id`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `project2i2w`.`customer` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `project2i2w`.`customer` (
    `customer_id` INT NOT NULL AUTO_INCREMENT, 
    `first_name` VARCHAR(45) NOT NULL, 
    `last_name` VARCHAR(45) NOT NULL, 
    `city` VARCHAR(45) NOT NULL, 
    `street` VARCHAR(20) NOT NULL, 
    `province` VARCHAR(30) NOT NULL, 
    `postal` CHAR(7) NOT NULL, 
    PRIMARY KEY (`customer_id`), 
    CONSTRAINT `fk_customer_services` 
    FOREIGN KEY (`customer_id`) 
    REFERENCES `project2i2w`.`services` (`customer_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `project2i2w`.`op_sys` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `project2i2w`.`op_sys` (
    `os_id` INT NOT NULL AUTO_INCREMENT, 
    `os_name` VARCHAR(25) NOT NULL, 
    `os_desc` VARCHAR(250) NULL, 
    `os_ver` VARCHAR(10) NOT NULL, 
    PRIMARY KEY (`os_id`), 
    CONSTRAINT `fk_op_sys_services1` 
    FOREIGN KEY (`os_id`) 
    REFERENCES `project2i2w`.`services` (`os_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

-- ----------------------------------------------------- 
-- Data for table `project2i2w`.`services` 
-- ----------------------------------------------------- 
START TRANSACTION; 
USE `project2i2w`; 
INSERT INTO `project2i2w`.`services` (`service_id`, `service_name`, `service_desc`, `os_id`, `customer_id`) VALUES (1, 'Virus Removal', 'Removing of viruses.', 1, 1); 
INSERT INTO `project2i2w`.`services` (`service_id`, `service_name`, `service_desc`, `os_id`, `customer_id`) VALUES (2, 'Tune-up', 'Tuning system performance.', 2, 2); 
INSERT INTO `project2i2w`.`services` (`service_id`, `service_name`, `service_desc`, `os_id`, `customer_id`) VALUES (3, 'Rooting', 'Accessing super-user status.', 3, 3); 
INSERT INTO `project2i2w`.`services` (`service_id`, `service_name`, `service_desc`, `os_id`, `customer_id`) VALUES (4, 'Restore', 'Restoring to stock factory condition.', 4, 4); 
INSERT INTO `project2i2w`.`services` (`service_id`, `service_name`, `service_desc`, `os_id`, `customer_id`) VALUES (5, 'Fix Permissions', 'Fixing file permissions.', 5, 5); 

COMMIT; 


-- ----------------------------------------------------- 
-- Data for table `project2i2w`.`customer` 
-- ----------------------------------------------------- 
START TRANSACTION; 
USE `project2i2w`; 
INSERT INTO `project2i2w`.`customer` (`customer_id`, `first_name`, `last_name`, `city`, `street`, `province`, `postal`) VALUES (1, 'Kathryn', 'Trollinger', 'Kanata', '2337 Merivale Road', 'ON', 'K2K 1L9'); 
INSERT INTO `project2i2w`.`customer` (`customer_id`, `first_name`, `last_name`, `city`, `street`, `province`, `postal`) VALUES (2, 'Lori ', 'Frederick', 'Toronto', '799 Yonge Street', 'ON', 'M4W 1J7'); 
INSERT INTO `project2i2w`.`customer` (`customer_id`, `first_name`, `last_name`, `city`, `street`, `province`, `postal`) VALUES (3, 'Maxine ', 'Coley', 'Ingersoll', '1305 Albert Street', 'ON', 'N5C 1S2'); 
INSERT INTO `project2i2w`.`customer` (`customer_id`, `first_name`, `last_name`, `city`, `street`, `province`, `postal`) VALUES (4, 'June ', 'Harrison', 'Windsor', '1089 Goyeau Ave', 'ON', 'N9A 1H9'); 
INSERT INTO `project2i2w`.`customer` (`customer_id`, `first_name`, `last_name`, `city`, `street`, `province`, `postal`) VALUES (5, 'Joan ', 'Dunn', 'Oshawa', '615 Toy Avenue', 'ON', 'L1H 7M3'); 

COMMIT; 


-- ----------------------------------------------------- 
-- Data for table `project2i2w`.`op_sys` 
-- ----------------------------------------------------- 
START TRANSACTION; 
USE `project2i2w`; 
INSERT INTO `project2i2w`.`op_sys` (`os_id`, `os_name`, `os_desc`, `os_ver`) VALUES (1, 'Windows', 'OS by Microsoft', '10'); 
INSERT INTO `project2i2w`.`op_sys` (`os_id`, `os_name`, `os_desc`, `os_ver`) VALUES (2, 'Mac OSX', 'OS by Apple', 'El Capitan'); 
INSERT INTO `project2i2w`.`op_sys` (`os_id`, `os_name`, `os_desc`, `os_ver`) VALUES (3, 'Android', 'OS by Google', 'Marshmellow'); 
INSERT INTO `project2i2w`.`op_sys` (`os_id`, `os_name`, `os_desc`, `os_ver`) VALUES (4, 'iOS', 'OS by Apple', '10'); 
INSERT INTO `project2i2w`.`op_sys` (`os_id`, `os_name`, `os_desc`, `os_ver`) VALUES (5, 'Linux', 'Open-source OS', 'Ubuntu'); 

COMMIT; 

誰かが私のためにこれを修正し、それが働いていない理由を教えてもらえば、私は非常にそれをapreciateだろう。

ニック

+0

http://stackoverflow.com/questions/24106756/create-table-fails-with-foreign-key-constraint-is-incorrectly-formedチェックアウトしてください。それは助けになるはずです。 –

答えて

0

あなたはcustomer_idのために何らかの種類のキーが必要です。それはそのトリックを行います。

CREATE TABLE IF NOT EXISTS `project2i2w`.`services` (
`service_id` INT NOT NULL AUTO_INCREMENT, 
`service_name` VARCHAR(50) NOT NULL, 
`service_desc` VARCHAR(250) NOT NULL, 
`os_id` INT NOT NULL, 
`customer_id` INT NOT NULL, 
INDEX `customerid` (`customer_id`), 
PRIMARY KEY (`service_id`)) 
ENGINE = InnoDB; 

- 表project2i2wcustomer


CREATE TABLE IF NOT EXISTS `project2i2w`.`customer` (
`customer_id` INT NOT NULL AUTO_INCREMENT, 
`first_name` VARCHAR(45) NOT NULL, 
`last_name` VARCHAR(45) NOT NULL, 
`city` VARCHAR(45) NOT NULL, 
`street` VARCHAR(20) NOT NULL, 
`province` VARCHAR(30) NOT NULL, 
`postal` CHAR(7) NOT NULL, 
PRIMARY KEY (`customer_id`), 
CONSTRAINT `fk_customer_services` 
FOREIGN KEY (`customer_id`) 
REFERENCES `project2i2w`.`services` (`customer_id`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
    ENGINE = InnoDB; 

この

+0

エラーコード:1064. SQL構文にエラーがあります。 「UNIQUE KEY INT NULL、PRIMARY KEY(service_id)」の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。ENGINE = InnoDB at line 1 –

+0

これは試してみるべきです:) – Oncodeeater

+0

これは機能しました!ありがとうx100000000! –

0

はこの試してみてください。外部キーは、参照テーブルの主キーでなければなりません

CREATE TABLE IF NOT EXISTS `project2i2w`.`services` (
    `service_id` INT NOT NULL AUTO_INCREMENT, 
    `service_name` VARCHAR(50) NOT NULL, 
    `service_desc` VARCHAR(250) NOT NULL, 
    `os_id` INT NOT NULL, 
    PRIMARY KEY (`service_id`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 

CREATE TABLE IF NOT EXISTS `project2i2w`.`customer` (
    `customer_id` INT NOT NULL AUTO_INCREMENT, 
    `services_id` INT NOT NULL, 
    `first_name` VARCHAR(45) NOT NULL, 
    `last_name` VARCHAR(45) NOT NULL, 
    `city` VARCHAR(45) NOT NULL, 
    `street` VARCHAR(20) NOT NULL, 
    `province` VARCHAR(30) NOT NULL, 
    `postal` CHAR(7) NOT NULL, 
    PRIMARY KEY (`customer_id`), 
    CONSTRAINT `fk_customer_services` 
    FOREIGN KEY (`services_id`) 
    REFERENCES `project2i2w`.`services` (`service_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

を。

+0

返信いただきありがとうございます!しかし、それでも私には同じエラーが与えられています。 –

+0

@NicholasSavory申し訳ありませんが、FKのPKの名前が間違っていました。私は自分の投稿を編集しました。今すぐ試してください –

+0

それは今私を撃っていますエラーコード:1452.子行を追加または更新できません:外部キー制約が失敗しました( 'project2i2w'.customer'、CONSTRAINT' fk_customer_services')FOREIGN KEY( 'services_id')REFERENCES' services' ( 'service_id')NO UPTION NO UPTIONのアクションを削除します) ' –

関連する問題