为什么我的查询在错误时给出了错误的错误?

我正在使用MySQL phpmyadmin和xampp V3.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 上的两个错误"Unexpected begining of the statement"和另一个 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))

请在此详细解释 .

先感谢您!

回答(1)

2 years ago

如果查看syntax for CREATE TABLE in MySQL,您将看到列定义仅对 NOT NULLUNIQUEPRIMARY KEYDEFAULT 具有内联约束:

column_definition:
data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)}]
[AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
[评论'字符串']
[COLLATE collation_name]
[COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}]
[STORAGE {DISK | MEMORY | DEFAULT}]
[reference_definition]
|数据类型
[GENERATED ALWAYS] AS(表达式)
[VIRTUAL |存储] [NOT NULL |空值]
[UNIQUE [KEY]] [[PRIMARY] KEY]
[评论'字符串']

传统方法是明确使用 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)
);