[ djovan01 @ 26.12.2006. 19:28 ] @
kada kreirate tabelu1 i u njoj definisete Primary key i Foreign Key koji references primary key u tabeli2 znaci da ce foreign key vrednost biti prenesena iz njegove tabele2 u tabelu1? Jesam li u pravu? Kreirala sam bazu sa tabelama i bila ubedjena da sam ih povezala preko Foreign Key-a. Ovako sam ja to uradila. U cemu je moja greska?


CREATE TABLE customer
(c_id INT(6),
c_name VARCHAR(10),
contact_name VARCHAR(20),
phone INT(10),
email VARCHAR(40),
j_location VARCHAR(40),
start_date VARCHAR(10),
e_id INT(10),
f_id INT(10),
p_id INT(10),
r_id INT(10),
CONSTRAINT customer_c_id_pk PRIMARY KEY(c_id),
CONSTRAINT customer_e_id_fk FOREIGN KEY(e_id) REFERENCES facility(e_id));

CREATE TABLE facility
(c_id INT(6),
hours VARCHAR(10),
ceiling_ht VARCHAR(10),
floor VARCHAR(10),
loading_dock VARCHAR(4),
ground_door VARCHAR(4),
crane VARCHAR(4),
CONSTRAINT facility_c_id_pk PRIMARY KEY(c_id));




[ mb_sa @ 26.12.2006. 21:30 ] @
Code:
CONSTRAINT customer_e_id_fk FOREIGN KEY(e_id) REFERENCES facility(c_id));


Mislim da bi ovako trebalo!
[ 357_97 @ 26.12.2006. 21:53 ] @
Posto me je neko vec preduhitrio skrenucu paznju samo na to da FOREIGN KEY podrzava samo InnoDB engine. Vise o svemu ovde.
[ mb_sa @ 26.12.2006. 22:07 ] @
Citat:
357_97: Posto me je neko vec preduhitrio skrenucu paznju samo na to da FOREIGN KEY podrzava samo InnoDB engine. Vise o svemu ovde.


Da, da! Inace, MyISAM je defaultni DB engine u mySQLu, sa obzirom da nije naveden prilikom kreiranej tabele!
[ djovan01 @ 27.12.2006. 13:13 ] @
prvi put cujem za InnoDB posto sam pocitala nesto o tome da li mozete mi reci da ukoliko znaci specifikujem ENGINE=InnoDB; da ce moj foreign key raditi tj da ce moje tabele biti povezane kako treba ?
[ mb_sa @ 27.12.2006. 15:49 ] @
Citat:
djovan01: prvi put cujem za InnoDB posto sam pocitala nesto o tome da li mozete mi reci da ukoliko znaci specifikujem ENGINE=InnoDB; da ce moj foreign key raditi tj da ce moje tabele biti povezane kako treba ?


Da! uostalom probaj :)
[ djovan01 @ 27.12.2006. 16:48 ] @
ne to nije pomoglo da tabele budu povezane. sta sam uradila je sledece. Svakoj tabeli sam uradila izmenu ALTER TABLE table_name ENGINE=INNODB, medjutim i dalje foreign keys nemaju nikakvog efekta. Jedina izmena je sto u okviru svake tabele na mestu Type gde je pisalo MyISAM sad pise InnoDB. Sta sada da radim?
[ mb_sa @ 27.12.2006. 20:32 ] @
Citat:
djovan01: ne to nije pomoglo da tabele budu povezane. sta sam uradila je sledece. Svakoj tabeli sam uradila izmenu ALTER TABLE table_name ENGINE=INNODB, medjutim i dalje foreign keys nemaju nikakvog efekta. Jedina izmena je sto u okviru svake tabele na mestu Type gde je pisalo MyISAM sad pise InnoDB. Sta sada da radim?


Trebalo bi da je pomoglo, ako si sve ispravno uradila?! Sta za tebe znaci da FK nemaju nikakvog efekta?

Hajdem, da probamo ovako ;)

Code:
CREATE TABLE facility
(f_id INT(6),
hours VARCHAR(10),
ceiling_ht VARCHAR(10),
floor VARCHAR(10),
loading_dock VARCHAR(4),
ground_door VARCHAR(4),
crane VARCHAR(4),
CONSTRAINT facility_f_id_pk PRIMARY KEY(f_id)) ENGINE=InnoDB;

CREATE TABLE customer
(c_id INT(6),
c_name VARCHAR(10),
contact_name VARCHAR(20),
phone INT(10),
email VARCHAR(40),
j_location VARCHAR(40),
start_date VARCHAR(10),
e_id INT(10),
f_id INT(10),
p_id INT(10),
r_id INT(10),
CONSTRAINT customer_c_id_pk PRIMARY KEY(c_id),
CONSTRAINT customer_f_id_fk FOREIGN KEY(f_id) REFERENCES facility(f_id)) ENGINE=InnoDB;


Kreiraj ove dvije tabele (u tabeli facility nemoj unostii nikakve recorde), a zatim izvrsi ovaj INSERT:

Code:

INSERT INTO customer (c_id,f_id) VALUES (1,1);


pa nam javi da li se je ovaj INSERT izvrsio i koju poruku mysql javlja!
[ djovan01 @ 27.12.2006. 20:57 ] @
Posle ubacivanja dobijem sledecu gresku:


Error

SQL query:

INSERT INTO customer( c_id, f_id )
VALUES ( 1, 1 )

MySQL said: Documentation
#1216 - Cannot add or update a child row: a foreign key constraint fails
[ mb_sa @ 27.12.2006. 21:08 ] @
Citat:
djovan01: Posle ubacivanja dobijem sledecu gresku:


Error

SQL query:

INSERT INTO customer( c_id, f_id )
VALUES ( 1, 1 )

MySQL said: Documentation
#1216 - Cannot add or update a child row: a foreign key constraint fails


Da, tu gresku i trebas dobiti! FK constraint je odradio svoj posao. Procitaj nesto teorije o foreign key constraint-ima!

pozdravi
[ djovan01 @ 28.12.2006. 13:01 ] @
Jos jedno pitanje. Ja mislim da razumem koncept kod FK ono sto sam do sada procitala kaze da je FK polje koje povezuje dve tabele i FK u tabeli2 prestavlja PK u tabeli1 e sada oko cega sam se ja pogubila je sledece. Da li kada se promeni PK vrednost za svaki ubacen red automatski se menja vrednost u FK. Jeli tako?
[ 357_97 @ 28.12.2006. 21:52 ] @
Citat:
djovan01: Jos jedno pitanje. Ja mislim da razumem koncept kod FK ono sto sam do sada procitala kaze da je FK polje koje povezuje dve tabele i FK u tabeli2 prestavlja PK u tabeli1 e sada oko cega sam se ja pogubila je sledece. Da li kada se promeni PK vrednost za svaki ubacen red automatski se menja vrednost u FK. Jeli tako?


Izgleda da nisi bas razumela sustinu FK-a... Pogledaj ovde, valjda ce ti to pomoci jer je clanak na srpskom jeziku!