2017-09-14 105 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行:无法添加外键约束 –