2017-12-18 35 views
0

어쩌면 어리석은 질문 일 수 있습니다.레코드를 삽입 할 때 관계 테이블이 업데이트되지 않습니다.

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', '[email protected]'); 

하고 올바르게 테이블 사용자와 트윗을 업데이트

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

하지만, 테이블 POST는 비어 있습니다. 왜? 그것은 ID_User 및 ID_Tweet로 업데이 트해야합니다 또는 내가 잘못 됐어?

+0

user_id 필드를 포함하는 경우

그래서 더 ... 포스트 테이블이 자동으로 채워되지 않습니다 – jarlh

+0

, 당신은 그것을 채울 수 있습니다. DB에 방금 삽입 한 TWEET (s)이 어떤 USER (들)인지 어떻게 알 수 있습니까? – MatBailie

+0

암호를 데이터베이스에 일반 텍스트로 저장하지 마십시오. https://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database –

답변

0

foreing key은 테이블 일관성을 유지하기위한 제약 조건이므로 사용자가없는 고아 게시와 같은 잘못된 데이터는 존재하지 않습니다. 따라서 MatBailie는 데이터가 자동으로 채워지지 않는다고 말합니다.

당신은 당신의 rdbms를 지정하지 않았지만 삽입 후에 last_insert id를 얻어야합니다. SQL Server의 예를 들어

How to get last inserted id?

그리고 당신은 테이블 post에 새 레코드를 만들 수 있습니다.

또한 아마도 모델이 너무 단순하지만 지금은 테이블이없는 이유에 대해 알지 못합니다. POST 새 데이터가 관계에 추가되어 있기 때문입니다. 당신은 당신이뿐만 아니라 게시물에 삽입해야 트윗

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, 
);