2016-12-10 11 views
-1

データベースのテーブルにデータを取り込むために使用している.sqlファイルがあります。以下は私が使用しているコードです。MYSQLエラーを受信しましたが、何が起こっているのか理解できません

CREATE TABLE Worker (
    worker_id int NOT NULL AUTO_INCREMENT, 
    fname varchar(15) NOT NULL, 
    lname varchar(20) NOT NULL, 


    primary key(worker_id) 
    ); 


CREATE TABLE Customer (
    customer_id int NOT NULL Auto_Increment, 
    primary key (customer_id) 
    ); 

CREATE TABLE Orders (
Orders_id int NOT NULL AUTO_INCREMENT, 
customer_id int NOT NULL, 
worker_id int NOT NULL, 
Orders_detail_id int NOT NULL, 
Orders_Placed date NOT NULL, 
Delivered_on date NOT NULL, 
Total varchar(8) NOT NULL, 
Ship_addr varchar(50) NOT NULL, 
Order_status varchar(35) NOT NULL, 

primary key(Orders_id), 
foreign key(customer_id) references Customer(customer_id), 
foreign key(worker_id) references Worker(worker_id), 
foreign key(Orders_detail_id) references orders_detail(Orders_detail_id) 
); 

CREATE TABLE orders_detail (
    Orders_detail_id int NOT NULL Auto_Increment, 
    Product_id int NOT NULL, 
    Quantity varchar(4) NOT NULL, 

    primary key (Orders_detail_id, Product_id) 
    ); 

CREATE TABLE PRODUCT (
    Product_id int NOT NULL Auto_Increment, 
    Prod_name varchar(20) NOT NULL, 
    Prod_desc varchar(45) NOT NULL, 
    Prod_price varchar(6) NOT NULL, 
    Quantity_left varchar(4) NOT NULL, 

    primary key (Product_id) 
); 
  • ファイルを実行しようとすると、私は、次のエラーが表示さ:私はエラーが表示される理由についてのヒントを得ることができれば、私は感謝

ERROR 1005 (HY000) at line 27: Can't create table 'houston.ORDERS' (errno: 150)

を。

+0

は私がorders' '後に作成されたあなたの' orders'テーブルの参照 'orders_details'が作成していると思います動作するはずです。 'orders'の前に' order_details'テーブルを作成してみてください。 –

答えて

0

これは、Ordersの外部キー制約をorders_detailに追加しようとしているためです。注文前にorders_detailのテーブルを作成してみてください

+0

それは働いた、それは意味があると思う、私はそこにない何かを参照することはできません知っていたはずです。私は答えを有益とマークした – houston

0

まず、このsqlを実行する必要があります。

SET FOREIGN_KEY_CHECKS=0; 

そして、あなたのsqlsを実行します。

その後、このsqlを実行します。

SET FOREIGN_KEY_CHECKS=1; 

それだけです。

1

あなたはorders_detailテーブルの前にordersテーブルを作成している - このクエリ後に作成されるテーブルorders_detailを検索orders_detail(Orders_detail_id)foreign key(Orders_detail_id)参照を。

使用このコードは、それをテストし、それが動作します:

CREATE TABLE Worker (
    worker_id int NOT NULL AUTO_INCREMENT, 
    fname varchar(15) NOT NULL, 
    lname varchar(20) NOT NULL, 

    primary key(worker_id) 
); 


CREATE TABLE Customer (
    customer_id int NOT NULL Auto_Increment, 
    primary key (customer_id) 
); 

CREATE TABLE orders_detail (
    Orders_detail_id int NOT NULL Auto_Increment, 
    Product_id int NOT NULL, 
    Quantity varchar(4) NOT NULL, 

    primary key (Orders_detail_id, Product_id) 
); 

CREATE TABLE Orders (
    Orders_id int NOT NULL AUTO_INCREMENT, 
    customer_id int NOT NULL, 
    worker_id int NOT NULL, 
    Orders_detail_id int NOT NULL, 
    Orders_Placed date NOT NULL, 
    Delivered_on date NOT NULL, 
    Total varchar(8) NOT NULL, 
    Ship_addr varchar(50) NOT NULL, 
    Order_status varchar(35) NOT NULL, 

    primary key(Orders_id), 
    foreign key(customer_id) references Customer(customer_id), 
    foreign key(worker_id) references Worker(worker_id), 
    foreign key(Orders_detail_id) references orders_detail(Orders_detail_id) 
); 

CREATE TABLE PRODUCT (
    Product_id int NOT NULL Auto_Increment, 
    Prod_name varchar(20) NOT NULL, 
    Prod_desc varchar(45) NOT NULL, 
    Prod_price varchar(6) NOT NULL, 
    Quantity_left varchar(4) NOT NULL, 

    primary key (Product_id) 
); 
0

foreign key(Orders_detail_id) references orders_detail(Orders_detail_id)検索をこのクエリ後に作成されたテーブルorders_detailため。

は、スクリプトの下部に CREATE TABLE Ordersクエリを挿入し、すべてが期待通り:)

関連する問題