插入记录时,关系表不会更新

时间:2017-12-18 15:12:24

标签: mysql sql foreign-keys entity-relationship

也许这可能是一个愚蠢的问题。好的,所以我创建了下表:

create table USER(
    ID int NOT NULL AUTO_INCREMENT primary key,
    firstname varchar(50) not null,
    lastname varchar(50) not null,
    password varchar(20) not null,
    emailU varchar(100) not null
);

create table POST(
    ID_User int,
    ID_Tweet int,
    primary key(ID_User, ID_Tweet),
    foreign key(ID_User) references USER(ID) on update cascade on delete cascade,
    foreign key(ID_Tweet) references TWEET(ID) on update cascade on delete cascade
);

create table TWEET(
    ID int NOT NULL AUTO_INCREMENT primary key,
    Text varchar(200)
);

当我插入某些内容时,例如:

insert into USER (firstname, lastname, password, emailU) values ('X', 'Y', 'XY', 'xy@gmail.com');

insert into TWEET (text) values ('Something');

它正确更新表USER和TWEET,但表POST仍为空。为什么?它应该使用ID_User和ID_Tweet进行更新,否则我会出错?

1 个答案:

答案 0 :(得分:0)

foreing key只是一个约束,为了保持表的一致性,所以你没有错误的数据(比如没有任何用户的孤立帖子)。因此,MatBailie说数据不会自动填充。

你没有指定你的rdbms但是在插入之后你需要获取last_insert id。例如在Sql Server中

How to get last inserted id?

然后您使用它在表post上创建新记录。

也许你的模型太简单了,但现在我没有看到你需要表POST因为没有新数据将它添加到关系中。

如果您在推文中包含user_id字段

,那就更好了
create table TWEET(
    ID int NOT NULL AUTO_INCREMENT primary key,
    Text varchar(200),
    ID_User int,
    foreign key(ID_User) references USER(ID) on update cascade on delete cascade,
);