【问题标题】:Not sure why this syntax error is happening不知道为什么会发生这种语法错误
【发布时间】:2018-10-12 17:19:38
【问题描述】:

您好,我对 MySQL 不是很熟悉,因为我今天才开始使用它,而且我不断收到这个语法错误,我不确定问题出在哪里。我附上了代码的screenshot,并将其粘贴在下面,错误以粗体显示。

如果这是一个很容易修复的愚蠢错误,我很抱歉,我只是不知道如何修复它,非常感谢任何帮助。

CREATE TABLE copy (
    `code` INT NOT NULL,
    isbn CHAR(17) NOT NULL,
    duration TINYINT NOT NULL,
    CONSTRAINT pkcopy  PRIMARY KEY (isbn, `code`),
    CONSTRAINT fkcopy FOREIGN KEY (isbn) REFERENCES book (isbn));

CREATE TABLE student (
    `no` INT NOT NULL,
    `name` VARCHAR(30) NOT NULL,
    school CHAR(3) NOT NULL,
    embargo BIT NOT NULL,
    CONSTRAINT pkstudent PRIMARY KEY (`no`));

CREATE TABLE loan (
    `code` INT NOT NULL,
    `no` INT NOT NULL,
    taken DATE NOT NULL,
    due DATE NOT NULL,
    `return` DATE NULL,
    CONSTRAINT pkloan PRIMARY KEY (taken, `code`, `no`),
    CONSTRAINT fkloan FOREIGN KEY (`code`, `no`) REFERENCES copy, student **(**`code`, `no`));

【问题讨论】:

  • 创建外键时不能引用两个不同的表(即使是复合的)

标签: mysql mariadb


【解决方案1】:

先创建表,然后使用 ALTER TABLE 语句逐个添加外键。您将无法在外键上调用两个不同的表,因此您必须使用映射到两者的 ID。以下是创建表后添加外键的示例:

添加一个名为 vendor 的新表并更改 products 表以包含 vendor id 字段:

USE dbdemo;

CREATE TABLE vendors(
    vdr_id int not null auto_increment primary key,
    vdr_name varchar(255)
)ENGINE=InnoDB;

ALTER TABLE products 
ADD COLUMN vdr_id int not null AFTER cat_id;

要将外键添加到产品表中,请使用以下语句:

ALTER TABLE products
ADD FOREIGN KEY fk_vendor(vdr_id)
REFERENCES vendors(vdr_id)
ON DELETE NO ACTION
ON UPDATE CASCADE;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多