• MySQL Error Code 1822解决方法


    通常来说这个报错都是因为引用的外键在parent table中不是主键或不是unique导致的。但是今天碰到了下面的情况:

    这是ER图的一部分,其中bed table的主键是(dorm_id, room_id, bed_id), dorm_id和room_id是外键,
    开始时我的定义是:

    create table bed(
    dorm_id varchar(45) not null,
    room_id varchar(45) not null,
    bed_id varchar(45) not null,
    is_long varchar(45) not null,
    primary key(dorm_id, room_id, bed_id),
    foreign key(dorm_id) references room(dorm_id),
    foreign key(room_id) references room(room_id)
    )engine=InnoDB default charset=utf8;
    

    结果提示error 1822。但是dorm_id和room_id在room表中确实定义为了PK
    后来仔细一想,room表的主键是(dorm_id, room_id),因此不能把他们分开引用,要一起引用。
    改为:

    create table bed(
    dorm_id varchar(45) not null,
    room_id varchar(45) not null,
    bed_id varchar(45) not null,
    is_long varchar(45) not null,
    primary key(dorm_id, room_id, bed_id),
    foreign key(dorm_id, room_id) references room(dorm_id, room_id) 
    )engine=InnoDB default charset=utf8;
    

    即可。

  • 相关阅读:
    goroutine
    golang package log
    golang单元测试
    golang 文件操作
    go递归打印指定目录下的所有文件及文件夹
    go语言切片作为函数参数的研究
    go数据类型之基本类型
    结束了
    codeforces358D Dima and Hares【dp】
    codeforces1081G Mergesort Strikes Back【期望dp+脑洞】
  • 原文地址:https://www.cnblogs.com/shijiyuanaa/p/12654447.html
Copyright © 2020-2023  润新知