2017-09-14 54 views
0

我正在創建/更新數據庫和表的SQL分配。我收到錯誤,指出「標識符在此位置無效」和「意外標識符」。這是我的SQL:SQL語法標識問題

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'; 

DROP SCHEMA IF EXISTS SparkleDiamonds;  
CREATE SCHEMA IF NOT EXISTS SparkleDiamonds DEFAULT CHARACTER SET utf8 ; 
USE SparkleDiamonds; 

DROP TABLE IF EXISTS SparkleDiamonds.Customer; 
CREATE TABLE IF NOT EXISTS SparkleDiamonds.Customer (
    cust_num INT NOT NULL, 
    cust_fname VARCHAR(45) NULL, 
    cust_initial VARCHAR(45) NULL, 
    cust_lname VARCHAR(45) NULL, 
    cust_address VARCHAR(45) NULL, 
    cust_address2 VARCHAR(45) NULL, 
    cust_address3 VARCHAR(45) NULL, 
    cust_Phone_No VARCHAR(45) NULL, 
    location2_address VARCHAR(45) NULL, 
    location2_address2 VARCHAR(45) NULL, 
    location2_address3 VARCHAR(45) NULL, 
    PRIMARY KEY (cust_num)) 
ENGINE = InnoDB; 

DROP TABLE IF EXISTS SparkleDiamonds.Orders; 
CREATE TABLE IF NOT EXISTS SparkleDiamonds.Orders (
    order_num INT NOT NULL, 
    cust_num INT NULL, 
    order_tran_id INT NULL, 
    order_emp_id INT NULL, 
    order_transaction_time VARCHAR(45) NULL, 
    order_location VARCHAR(45) NULL, 
    PRIMARY KEY (order_num)) 
    *INDEX fk_Orders_Customer_idx (cust_num ASC), 
    CONSTRAINT fk_Orders_Customer 
    FOREIGN KEY cust_num 
    REFERENCES SparkleDiamonds.Customer cust_num 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

DROP TABLE IF EXISTS SparkleDiamonds.Inventory; 
CREATE TABLE IF NOT EXISTS SparkleDiamonds.Inventory (
    inv_diam_item_num VARCHAR(45) NOT NULL, 
    order_tran_id INT NULL, 
    inv_diam_cost DOUBLE NULL, 
    inv_diam_price DOUBLE NULL, 
    inv_diam_carat DOUBLE NULL, 
    inv_diam_clarity VARCHAR(45) NULL, 
    inv_diam_cut VARCHAR(45) NULL, 
    inv_diam_color VARCHAR(45) NULL, 
    inv_diam_on_hand VARCHAR(45) NULL, 
    PRIMARY KEY (inv_diam_item_num)) 
    *INDEX fk_Inventory_Orders_idx (order_tran_id ASC), 
    CONSTRAINT fk_Inventory_Orders1 
    FOREIGN KEY (order_tran_id) 
    REFERENCES SparkleDiamonds.Inventory (order_tran_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; 

我已經把一個星號,其中的問題是,索引的語句。我對SQL更新,並且不確定哪些是錯誤的,以及代碼應該在這些點上閱讀什麼。我的問題是什麼?它應該讀什麼?哪些代碼可以解決這個問題?

+0

一次刪除一個語句,直到找出錯誤的位置。 –

回答

0

我可以看到你在這個語法錯誤:

CREATE TABLE IF NOT EXISTS SparkleDiamonds.Orders (
    order_num INT NOT NULL, 
    cust_num INT NULL, 
    order_tran_id INT NULL, 
    order_emp_id INT NULL, 
    order_transaction_time VARCHAR(45) NULL, 
    order_location VARCHAR(45) NULL, 
    PRIMARY KEY (order_num)) 
    *INDEX fk_Orders_Customer_idx (cust_num ASC), 
    CONSTRAINT fk_Orders_Customer 
     FOREIGN KEY cust_num 
     REFERENCES SparkleDiamonds.Customer cust_num 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
) 

我想你打算:

CREATE TABLE IF NOT EXISTS SparkleDiamonds.Orders (
    order_num INT NOT NULL, 
    cust_num INT NULL, 
    order_tran_id INT NULL, 
    order_emp_id INT NULL, 
    order_transaction_time VARCHAR(45) NULL, 
    order_location VARCHAR(45) NULL, 
    PRIMARY KEY (order_num), 
    INDEX fk_Orders_Customer_idx (cust_num ASC), 
    CONSTRAINT fk_Orders_Customer 
     FOREIGN KEY (cust_num) 
     REFERENCES SparkleDiamonds.Customer(cust_num) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 
); 

變化:

  • 額外的括號primary key
  • 逗號後在primary key聲明後
  • 各地cust_num多餘*
  • 括號外鍵約束

你必須在其他表類似的錯誤。您可能還有其他問題。

+0

我把星號放在錯誤可能被發現的地方 –

+0

我現在得到這個錯誤:錯誤1215(HY000)在49行:無法添加外鍵約束 –