mysql - 无法弄清楚为什么 mySql 数据库语法无法编译

标签 mysql sql syntax mysql-workbench

我在为自己的个人项目编写的数据库中遇到此语法错误,并且不确定为什么会发生此错误,任何帮助将不胜感激!此时想要的结果只是编译,错误是简单的语法错误。

问题表是团队表。

Error Code: 1215: Cannot add foreign key contraint.

-- CREATE DATABASE basketBall;
  DROP TABLE LEAGUE;
 -- DROP TABLE TEAM;
  DROP TABLE SESSION;
CREATE TABLE LEAGUE (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL UNIQUE,
    PRIMARY KEY(id)
);

CREATE TABLE SESSION (
    year INT NOT NULL,
    season VARCHAR(50) NOT NULL,
    division VARCHAR(5) NOT NULL,
    PRIMARY KEY(year, season, division),
    CONSTRAINT chk_season CHECK (season IN ('Fall', 'Winter', 'Spring', 'Summer'))
);

CREATE TABLE TEAM (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    season VARCHAR(50) NOT NULL,
    year INT NOT NULL,
    division VARCHAR(5) NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(season) REFERENCES SESSION(season),
    FOREIGN KEY(year) REFERENCES SESSION(year),
    FOREIGN KEY(division) REFERENCES SESSION(division)   

);

CREATE TABLE PLAYER (
    id INT NOT NULL AUTO_INCREMENT,
    fname VARCHAR(30) NOT NULL,
    lname VARCHAR(30) NOT NULL,
    lid INT,
    PRIMARY KEY(id)
);

CREATE TABLE GAME (
    id INT NOT NULL AUTO_INCREMENT,
    time VARCHAR(5),
    court VARCHAR(20),
    date DATE,
    PRIMARY KEY(id)
);

CREATE TABLE STATS  (
    pid INT NOT NULL,
    gid int NOT NULL,
    pts INT NOT NULL,
    fgm INT NOT NULL,
    fga INT NOT NULL,
    fta INT NOT NULL,
    ftm INT NOT NULL,
    3fgm INT NOT NULL,
    3fga INT NOT NULL,
    oreb INT NOT NULL,
    dreb INT NOT NULL,
    ast INT NOT NULL,
    stl INT NOT NULL,
    blk INT NOT NULL,
    turnover INT NOT NULL,
    eff INT NOT NULL,
    pf INT NOT NULL,
    min INT NOT NULL,
    PRIMARY KEY(pid, gid),
    FOREIGN KEY(pid) REFERENCES PLAYER(id),
    FOREIGN KEY(gid) REFERENCES GAME(id)
);



CREATE TABLE Players_on_Team (
    tid INT NOT NULL,
    pid INT NOT NULL,
    PRIMARY KEY(tid, pid),
    FOREIGN KEY(tid) REFERENCES TEAM(id)

);

CREATE TABLE League_Sessions (
    lid INT NOT NULL,
    year INT NOT NULL,
    season VARCHAR(50) NOT NULL,
    division VARCHAR(5) NOT NULL,
    PRIMARY KEY(lid, year, season, division),
    FOREIGN KEY(lid) REFERENCES LEAGUE(id) 
);

最佳答案

必须对在外键中引用的列建立索引。 TEAM 中的这两个外键:

FOREIGN KEY(season) REFERENCES SESSION(season),
FOREIGN KEY(division) REFERENCES SESSION(division)   

引用没有自己索引的列。它们是多列索引的一部分,但只有多列索引的前缀充当这些特定列的索引。

您可以将 seasondivision 列上的单独索引添加到 SESSION 表中。但制作多列外键可能更合适:

FOREIGN KEY (year, season, division) REFERENCES SESSION(year, season, division)

关于mysql - 无法弄清楚为什么 mySql 数据库语法无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53327435/

相关文章:

php - 使用 MySQL 填充 highcharts 数据

php - 如何从 mysql 以数组形式检索数据并显示在另一个页面中进行操作?

php - MySQL 选择行值作为键=>值

sql - 如果一个特定列的小数部分不为 0,则 T-SQL 选择行

objective-c - "+"在 Objective-C 文件中意味着什么

objective-c - Objective-C中的for循环

php - Python:将 args 转换为 dict,就像 PHP 的 compact 一样?

php - Codeigniter插入失败

php - 在指定索引处将行插入到 SQL 表中

sql - 推荐的 SQL 实践和书籍