【问题标题】:mysql.connector.errors.ProgrammingError: 1064 (42000)mysql.connector.errors.ProgrammingError: 1064 (42000)
【发布时间】:2020-11-21 03:08:50
【问题描述】:

我在尝试运行这行代码时收到如下所述的错误。

mysql.connector.errors.ProgrammingError: 1064 (42000)

在此之前,我使用主键制作了两张表,但这是第一张使用外键的表。知道为什么我的代码无法运行吗?

cursor.execute("""CREATE TABLE Order(
                     order_Num VARCHAR(10) NOT NULL PRIMARY KEY, 
                     customer_ID VARCHAR(10) FOREIGN KEY REFERENCES Customer(customer_ID), 
                     product_ID VARCHAR(10) FOREIGN KEY REFERENCES Product(product_ID), 
                     order_date DATE, 
                     num_of_items INT(3), 
                     status VARCHAR(255)
                  )""")

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    PRIMARY KEY 不同,SQL 标准不支持将FOREIGN KEY 关键字与定义的列放在同一行。但是 SQL 标准确实允许 REFERENCES 但不允许 MySQL。每docs

    MySQL 会解析但忽略“内联引用规范”(如 SQL 标准中所定义),其中引用被定义为列规范的一部分。 MySQL 仅在指定为单独的 FOREIGN KEY 规范的一部分时才接受 REFERENCES 子句。

    因此,在新行上单独指定 FOREIGN KEY。另外,考虑一些标识符的反引号,因为 Orderstatusreserved words

    CREATE TABLE `Order` ( 
         order_Num VARCHAR(10) NOT NULL PRIMARY KEY, 
         customer_ID VARCHAR(10), 
         product_ID VARCHAR(10), 
         order_date DATE, 
         num_of_items INT(3), 
         `status` VARCHAR(255) 
         FOREIGN KEY customer_ID REFERENCES Customer(customer_ID),
         FOREIGN KEY product_ID REFERENCES Product(product_ID)
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多