MySql错误1215:无法添加外键约束

MySql错误1215:无法添加外键约束,mysql,Mysql,在我的RIM中,我得到了1215 MySql错误 我知道错误的含义,我的约束是错误的。但我似乎无法修复它 错误出现在第33行,创建桌上扑克事件 我的代码是: create database FullHouseGr1; use FullHouseGr1; create table Player (player_id int not null, first_name varchar(20) not null, surname

在我的RIM中,我得到了1215 MySql错误

我知道错误的含义,我的约束是错误的。但我似乎无法修复它

错误出现在第33行,创建桌上扑克事件

我的代码是:

create database FullHouseGr1;
use FullHouseGr1;
create table Player
   (player_id       int             not null,
    first_name      varchar(20)     not null,
    surname         varchar(20)     not null,
    addres          varchar(40)     not null,
    postal_code     varchar(6)      not null,
    place           varchar(40)     not null,
    phone_number    varchar(20)     not null,
    email_addres    varchar(255)    not null,
    points          int             not null,
primary key(player_id));

create table Location
   (house_number    int       not null,
    postal_code     varchar(6)  not null,
    capacity        int       not null,
    place           varchar(40) not null,
    street          varchar(40) not null,
primary key(house_number, postal_code));

create table Poker_event
   (date_time       datetime    not null,
    min_players     int         not null,
    max_players     int         not null,
    house_number    int         not null, 
    postal_code     varchar(6)  not null,
primary key(date_time),
foreign key(house_number, postal_code)   references Location(house_number, postal_code) on delete cascade on update cascade);

create table Tournament
   (date_time   datetime    not null,
    prize       int         not null,
primary key(date_time),
foreign key(date_time)  references Poker_event(date_time) on delete no action on update cascade);

create table Tournament_round
   (round_nr    int       not null,
    date_time   datetime    not null,
primary key(date_time, round_nr),
foreign key(date_time)  references Tournament(date_time) on delete no action on update cascade);

create table Tournament_table
   (winner      int         not null,
    date_time   datetime    not null,
    round_nr    int         not null,
primary key(winner, date_time, round_nr),
foreign key(date_time)  references Tournament(date_time) on delete no action on update cascade,
foreign key(round_nr)   references Tournament(round_nr) on delete no action on update cascade);

create table Professional
   (p_name    varchar(40) not null,
primary key(name));

create table Masterclass
   (date_time       datetime    not null,
    min_rating      int       not null,
    name            varchar(40) not null,
primary key(date_time),
foreign key(p_name)       references Professional(p_name) on delete no action on update cascade,
foreign key(date_time)  references Poker_event(date_time) on delete no action on update cascade);

create table Poker_event_player
   (date_time   datetime    not null,
    has_payed   boolean     not null,
    player_id   int         not null,
primary key(date_time,  player_id),
foreign key(date_time)  references Poker_event(date_time) on delete no action on update cascade,
foreign key(player_id)  references Player on delete no action on update cascade);

create table    Player_tournament_table
   (winner      int         not null,
    date_time   datetime    not null,
    round_nr    int         not null,
    player_id   int         not null,
primary key(winner, date_time, round_nr, player_id),
foreign key(winner)     references  Tournament_table on delete no action on update cascade,
foreign key(round_nr)   references  Tournament_round on delete no action on update cascade,
foreign key(date_time)  references  Tournament on delete no action on update cascade,
foreign key(player_id)  references  Player on delete no action on update cascade);
您说的是关于DELETE SET NULL,但这两个字段都不可为NULL。请尝试删除级联

您还可以检查以确保两个表都在使用InnoDB引擎。

您说的是关于DELETE SET NULL,但这两个字段都不能为NULL。请尝试删除级联



您还可以检查以确保两个表都使用InnoDB引擎。

第33行在哪里?另外,MySQL发布的确切错误是什么?@BuhakeSindi确切的错误消息是1215-无法添加外键@blipman我发布了一个错误的答案您不需要索引引用列,但您应该这样做@mopo922是正确的。@Dan来自德国,该错误部分不完整。MySQL给出了导致错误原因的描述。@DanFromGermany我可能不来自我的老师。因为这将导致未使用的数据。宅院号码、邮政编码在荷兰是唯一的。由于这个问题很老,而且你已经接受了一个你现在似乎还没有接受的答案,你可能想为你的新问题问一个新问题。很难筛选出发生了什么变化。第33行在哪里?另外,MySQL发布的确切错误是什么?@BuhakeSindi确切的错误消息是1215-无法添加外键@blipman我发布了一个错误的答案您不需要索引引用列,但您应该这样做@mopo922是正确的。@Dan来自德国,该错误部分不完整。MySQL给出了导致错误原因的描述。@DanFromGermany我可能不来自我的老师。因为这将导致未使用的数据。宅院号码、邮政编码在荷兰是唯一的。由于这个问题很老,而且你已经接受了一个你现在似乎还没有接受的答案,你可能想为你的新问题问一个新问题。很难筛选已更改的内容。我需要使用什么来删除删除上的行?我一直在努力与删除和删除做斗争UPDATE@blipman17你能用更新级联上的删除级联替换更新级联上的删除级联上的集null吗?这会删除扑克事件's@blipman17,换一个完全不同的结构,使用真实的ID,怎么样。。如果有人更改了他/她的邮政编码怎么办?@DanFromGermany,我使用玩家id表示人,使用门牌号、邮政编码表示地点,因为这在荷兰是唯一的,我需要使用什么来删除删除中的行?我一直在努力与删除和删除做斗争UPDATE@blipman17你能用更新级联上的删除级联替换更新级联上的删除级联上的集null吗?这会删除扑克事件's@blipman17,换一个完全不同的结构,使用真实的ID,怎么样。。如果有人更改了他/她的邮政编码怎么办?@DanFromGermany,我用player_id表示人,用house_number表示地点,因为这在荷兰是独一无二的
create database FullHouseGr1;
use FullHouseGr1;
create table Player
   (player_id       int             not null,
    first_name      varchar(20)     not null,
    surname         varchar(20)     not null,
    addres          varchar(40)     not null,
    postal_code     varchar(6)      not null,
    place           varchar(40)     not null,
    phone_number    varchar(20)     not null,
    email_addres    varchar(255)    not null,
    points          int             not null,
primary key(player_id));

create table Location
   (house_number    int       not null,
    postal_code     varchar(6)  not null,
    capacity        int       not null,
    place           varchar(40) not null,
    street          varchar(40) not null,
primary key(house_number, postal_code));

create table Poker_event
   (date_time       datetime    not null,
    min_players     int         not null,
    max_players     int         not null,
    house_number    int         not null, 
    postal_code     varchar(6)  not null,
primary key(date_time),
foreign key(house_number, postal_code)   references Location(house_number, postal_code) on delete cascade on update cascade);

create table Tournament
   (date_time   datetime    not null,
    prize       int         not null,
primary key(date_time),
foreign key(date_time)  references Poker_event(date_time) on delete no action on update cascade);

create table Tournament_round
   (round_nr    int       not null,
    date_time   datetime    not null,
primary key(date_time, round_nr),
foreign key(date_time)  references Tournament(date_time) on delete no action on update cascade);

create table Tournament_table
   (winner      int         not null,
    date_time   datetime    not null,
    round_nr    int         not null,
primary key(winner, date_time, round_nr),
foreign key(date_time)  references Tournament(date_time) on delete no action on update cascade,
foreign key(round_nr)   references Tournament(round_nr) on delete no action on update cascade);

create table Professional
   (p_name    varchar(40) not null,
primary key(name));

create table Masterclass
   (date_time       datetime    not null,
    min_rating      int       not null,
    name            varchar(40) not null,
primary key(date_time),
foreign key(p_name)       references Professional(p_name) on delete no action on update cascade,
foreign key(date_time)  references Poker_event(date_time) on delete no action on update cascade);

create table Poker_event_player
   (date_time   datetime    not null,
    has_payed   boolean     not null,
    player_id   int         not null,
primary key(date_time,  player_id),
foreign key(date_time)  references Poker_event(date_time) on delete no action on update cascade,
foreign key(player_id)  references Player on delete no action on update cascade);

create table    Player_tournament_table
   (winner      int         not null,
    date_time   datetime    not null,
    round_nr    int         not null,
    player_id   int         not null,
primary key(winner, date_time, round_nr, player_id),
foreign key(winner)     references  Tournament_table on delete no action on update cascade,
foreign key(round_nr)   references  Tournament_round on delete no action on update cascade,
foreign key(date_time)  references  Tournament on delete no action on update cascade,
foreign key(player_id)  references  Player on delete no action on update cascade);