Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem sa ubacivanjem podataka u bazu

[es] :: MySQL :: problem sa ubacivanjem podataka u bazu

[ Pregleda: 1426 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glamoc

Član broj: 125620
Poruke: 346
212.200.65.*



+1 Profil

icon problem sa ubacivanjem podataka u bazu25.08.2010. u 14:30 - pre 166 meseci
Koristim mySql bazu za neku web aplikaciju koju radim u php(Zend) i imam dve tabele, tabela "user" i tabela "categories".U tabeli "user" izmedju ostalih nalazi se i
polje "user_username",i to polje sam uvezao u tabelu "categories" i to na sledeci nacin
FOREIGN KEY(`user_username`) references user(`user_username`)ON UPDATE CASCADE ON DELETE CASCADE
Mislio sam da cu ovim postici da iz aplikacije nije moguce u polje "user_username" tabele "categories" ubaciti nijednu vrednost koja se ne nalazi u polju "user_username" tabele "user" ali to nije slucaj.Interesuje me kako da postignem takvo ponasanje

Kad covjeka napusti Sunce njegovog zavicaja ko ce mu posvijetliti na putu povratka
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: problem sa ubacivanjem podataka u bazu25.08.2010. u 15:08 - pre 166 meseci
hint1: nemoj da prenosis text polja kroz tabele, prenosi ID (4 bajta umesto "mnogo" bajtova, mnoooogo je brze, indexi su manji, zauzima manje mesta na disku u kesevima u ramu ..)
hint2: da li su ti tabele innodb?
hint3: kada postavljas pitanje zgodno je da odma stavis rezultat od "show create table imetabele\G" kako ne bi gubili vreme na "podpitanja"

priprema
Code:

drop table if exists t2;
drop table if exists t1;
create table t1 (id int auto_increment primary key not null, name char(10), index i_name(name)) engine=innodb;
create table t2 (id int auto_increment primary key not null, t1name char(10), index x(t1name), 
foreign key (t1name) REFERENCES t1(name) ON UPDATE CASCADE ON DELETE CASCADE) engine=innodb;
insert into t1 (name) values ('pera'), ('zika'), ('laza');


i kako to na kraju izgleda:

Code:

mysql> insert into t2 (t1name) values ('pera');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t2 (t1name) values ('zika');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t2 (t1name) values ('laza');
Query OK, 1 row affected (0.02 sec)

mysql> insert into t2 (t1name) values ('laza');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t2 (t1name) values ('laza');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t2 (t1name) values ('mika');
ERROR 1452 (23000): Cannot add or update a child row: 
  a foreign key constraint fails (`test`.`t2`, CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`t1name`) 
  REFERENCES `t1` (`name`) ON DELETE CASCADE ON UPDATE CASCADE)
mysql>


kao sto vidis ne moze da se ubaci vrednost koja ne postoji u t1 - to je to sto si trazio ... problem je u tome sto da bi to radilo tabele moraju da budu InnoDB, myisam to ne podrzava
 
Odgovor na temu

glamoc

Član broj: 125620
Poruke: 346
212.200.65.*



+1 Profil

icon Re: problem sa ubacivanjem podataka u bazu26.08.2010. u 11:58 - pre 166 meseci
E hvala na odgovoru ovo radi.
Iskreno receno skorije sam se poceo ozbiljnije raditi sa bazama i ovaj tvoj primer me je naucio dosta stvari.
Eksperimentisao sam sa ovim tabelama sto si mi poslao i primetih da kad izostavim index-e iz tvoje tabele da nece ni da kreira tabelu t2(engine innodb),tj.javi gresku:
Code:
#1005 - Can't create table 'blogsys.t2' (errno: 150)


pa ako mozes da mi kazes sta je u pitanju, i za koja polja treba definisati i indekse u tabelama



Kad covjeka napusti Sunce njegovog zavicaja ko ce mu posvijetliti na putu povratka
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: problem sa ubacivanjem podataka u bazu26.08.2010. u 14:47 - pre 166 meseci
Citat:
glamockad izostavim index-e iz tvoje tabele da nece ni da kreira tabelu


ne mozes da referenciras
Code:

foreign key (t1name) REFERENCES t1(name) ON UPDATE CASCADE ON DELETE CASCADE)


ako t1.name nije indexiran

Citat:
glamocpa ako mozes da mi kazes sta je u pitanju, i za koja polja treba definisati i indekse u tabelama


definises indexe tamo gde ti trebaju, pitanje je malo preopsirno


 
Odgovor na temu

[es] :: MySQL :: problem sa ubacivanjem podataka u bazu

[ Pregleda: 1426 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.