为什么我的查询在正确的时候会出现错误?

pb3skfrl  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(306)

我将mysql phpmyadmin与xamppv3.2.2一起使用。
下面的代码不起作用!

CREATE TABLE Car (RegPlate int(8) NOT NULL PRIMARY KEY,
                  Brand varchar(20) NOT NULL,
                  Color varchar(20) NOT NULL,
                  Owner int(10) NOT NULL FOREIGN KEY REFERENCES Driver(ID))

它给了我两个错误一个是 ID 这是“声明的意外开始”和另一个关于 FOREIGN KEY “附近应有逗号或右括号 FOREIGN KEY “但是如果我从'id'中去掉括号,它的错误就消失了,但是错误仍然存在 FOREIGN KEY 仍然存在。为什么?
但如果我像这样重新构建代码,它就会工作

CREATE TABLE Car (RegPlate int(8) NOT NULL PRIMARY KEY,
                  Brand varchar(20) NOT NULL,
                  Color varchar(20) NOT NULL,
                  Owner int(10) NOT NULL,
                  FOREIGN KEY (Owner) REFERENCES driver(ID))

请详细解释。
提前谢谢!

w9apscun

w9apscun1#

如果你看看 CREATE TABLE 在mysql中,您将看到列定义仅对 NOT NULL , UNIQUE , PRIMARY KEY ,和 DEFAULT :

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]
      [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
      [COMMENT 'string']
      [COLLATE collation_name]
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [STORAGE {DISK|MEMORY|DEFAULT}]
      [reference_definition]
  | data_type
      [GENERATED ALWAYS] AS (expression)
      [VIRTUAL | STORED] [NOT NULL | NULL]
      [UNIQUE [KEY]] [[PRIMARY] KEY]
      [COMMENT 'string']

传统的方法是 CONSTRAINT 并为约束指定一个名称:

CREATE TABLE Car (
    RegPlate int(8) NOT NULL PRIMARY KEY,
    Brand varchar(20) NOT NULL,
    Color varchar(20) NOT NULL,
    Owner int(10) NOT NULL,
    CONSTRAINT fk_car_owner FOREIGN KEY (Owner) REFERENCES driver(ID)
);

相关问题