[ Milos911 @ 16.08.2009. 12:59 ] @
Ne znam kako da dam ime temi, ako neko zna bolje neka promeni :)
Zanima me sledece:
Pisem neku skriptu za razmenu lyrics-a. I osmislio sam mysql bazu na sledeci nacin:
Code:
-- phpMyAdmin SQL Dump
-- version 2.11.9.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 16, 2009 at 01:50 PM
-- Server version: 5.0.67
-- PHP Version: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `1234`
--

-- --------------------------------------------------------

--
-- Table structure for table `lyrics`
--

CREATE TABLE IF NOT EXISTS `lyrics` (
  `lid` int(15) NOT NULL,
  `song` varchar(20000) character set utf8 collate utf8_bin NOT NULL,
  PRIMARY KEY  (`lid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `lyrics`
--


-- --------------------------------------------------------

--
-- Table structure for table `song`
--

CREATE TABLE IF NOT EXISTS `song` (
  `sid` int(15) NOT NULL,
  `song` varchar(20000) character set utf8 collate utf8_bin NOT NULL,
  PRIMARY KEY  (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `song`
--


Posto ce tabela song (glupo ime promenicu sve kasnije) imati sigurno oko 1.000.000 unosa da li mi je ovo najbolje resenje za bazu? Podatke iz song tabele bih izvlacio na osnovu sid ciju bih vrednost uzimao iz lid iz tabele lyrics. Mozda bi se koristila i pretraga ove tabele ne verujem da bi se to cesto radilo(ali nikad se ne zna). Dakle pitanje je da li bi ovo radilo ok? Takodje posto sam pocetnik u mysql bio bih zahvalan da mi kazete ako primetite jos neke greske u tabelama. Hvala :)
[ stevs986 @ 16.08.2009. 15:45 ] @
Bez uvrede, ali ovo mi je nekako malo "siromasna" baza za tu svrhu... Trebalo bi malo ozbiljnije da poradis na njoj...
Verovatno ce ti biti potrebna neka pretraga po izvodjacima, a ne vidim da postoji neka tabela u kojoj bi se nalazili izvodjaci.....
Pa odredjeni izvodjac moze imati vise albuma, pa pesme vezes za album... itd. Nemoj da zuris, samo razmisli da si ti korisnik jednog takvog sajta sta bi voleo da se nadje na njemu, da na sto brzi nacin nadjes odgovarajucu pesmu...
[ Milos911 @ 16.08.2009. 16:21 ] @
Bice za izvodjace(tj vec ima) i ostalo. Dodacu jos gomilu stvari zanima me samo da li mi je pametno da u jednu tabelu strpam milion i kusur redova sa relativno mnogo sadrzaja u njima? Da li ce raditi normalno i sa nekom prihvatljivom brzinom? Mislim da hoce jer se sa osnovnom pretragom radi:
Code:
SELECT * FROM song WHERE sid=lid

Ali da li ce raditi normalno kad se pokrene pretraga koja u ovoj tabeli trazi rec "nothing" naprimer?
btw kad kazem normalno mislim na brzo :)
Da dodam da u tabelu song ne planiram da dodajem jos redova(osim ako ne treba) jer cu sve ostalo staviti u ostale tabele koje ce biti mnogo krace.
[ stevs986 @ 16.08.2009. 17:23 ] @
Pa sad, generalno treba izbegavati cuvanje velike kolicine tekstualnih podataka u bazi, alli u ovom slucaju, bas zbog pretrage ne mozes to da izbegnes....
Moraces da stavljas neka ogranicenja, recimo da rec za pretragu ne bude kraca od 3-4 znaka jer zamisli da imas sledecu situaciju SELECT * FROM song where song like '%a%' To bi ti vratilo sve rekorde iz baze, jer mislim da ne postoji pesma koja u svom tesktu nema makar jedno slovo a :)) .... Tako da kreni, probaj, pa ako zapnes neko ce ti ovde sigurno pomoci.....
[ Milos911 @ 16.08.2009. 18:01 ] @
Napravio sam mali test. Ne znam kako mi ranije nije palo na pamet :) Dodao sam u tabelu 1,542,376 redova i dobio
Code:

SQL query:
SELECT * 
FROM `song` 
WHERE sid =21341
1 total, Query took 0.0006 sec

Ovo je znaci ok ali ako pokrenem pretragu za malo duzom reci dobijem da je query took 0.5878 sec sto je vec previse(ne samo vremenski nego zauzme i veliku kolicinu sistemskih resursa). Verovatno cu morati da napravim google custom search :) Hvala na odgovorima, ako negde zapnem pitacu. Takodje ako neko jos ima neku sugestiju neka se ne ustrucava da je iznese :D
[ stevs986 @ 16.08.2009. 18:35 ] @
Da ali ne zaboravi da ces ti uglavno pretrazivati po recima a ne po id - u...
[ Milos911 @ 16.08.2009. 19:07 ] @
Uglavnom cu pretrazivati po id(tj procitaj dalje :)). Vecina korisnika trazi pesmu po imenu, a ja imena drzim u drugoj tabeli. U tabeli sa tekstovima polje sid mi sluzi da oznaci pesmu cije je ime napisano u drugoj tabeli.
[ bogdan.kecman @ 17.08.2009. 06:23 ] @
1. 2 tabele sa po 2 kolone nisu bas nesto sto moze da se komentarise
2. zaboravi pretragu tipa ... LIKE '%nesto%' ... na tabeli sa ista slogova trajace duze nego sto ce bilo ko hteti da ceka
3. mysql ima FULL TEXT SEARCH opciju ali SAMO na MYISAM tabelama.
4. obrati paznju da MyISAM tabele
- nisu crashe safe
- nisu transakcione


posle svega ovoga, reci cu ti LUCENE!!!

dakle, ako hoces da imas iole brzu full text pretragu - najbrze open source resenje ti je LUCENE .. nema nikakve veze sa mysql-om, nije relaciona baza podataka, ali satire koliko je brze od bilo koje relacione baze kada je full text pretraga u pitanju .... neki ozbiljniji projekat koji lici na to o cemu pricas bi realno bio baziran na hibridnoj bazi gde be deo (lyrics) sedeao na lucene-u a ostatak na mysql-u ... sve to onda vuce neke druge stvari za sobom .. no to je vec sve mnogo daleko od scope-a mysql foruma :)

[ bogdan.kecman @ 17.08.2009. 06:27 ] @
Citat:
Milos911: Uglavnom cu pretrazivati po id(tj procitaj dalje :)). Vecina korisnika trazi pesmu po imenu, a ja imena drzim u drugoj tabeli. U tabeli sa tekstovima polje sid mi sluzi da oznaci pesmu cije je ime napisano u drugoj tabeli.


dve tabele koje si poslao ne daju dovoljno informacija da bi ovo sto si ovde napisao imalo smisla ... a ako imas i trecu i cetvrtu i ... tabelu onda si trebao da ih stavis zajedno sa ove dve

sto se tice toga kako ce korisnici da pretrazuju - mozda ces ti da ih limitiras da mogu samo da browsuju kroz sajt ... "na slovo na slovo" i da tako dodju (ili sa sajta odu) do toga sto traze .. ili ces da se uzdas da ce google da ti indexira sajt pa da ti ne moras ... ali ako hoces da imas sajt koji nudi neku pretragu - onda moras da im das mogucnost da traze "sta im treba" a ne da to limitiras ...

sto se tice pitanja da li ce upit po id-u da bude spor - NECE ... dakle primary key upit (select * from t1 where PK=xyz) ce se izvrisi "odma" bez obzira koliko milijardi slogova imas u tabeli ...
[ Shinhan @ 17.08.2009. 07:15 ] @
Citat:
bogdan.kecman:
posle svega ovoga, reci cu ti LUCENE!!!

dakle, ako hoces da imas iole brzu full text pretragu - najbrze open source resenje ti je LUCENE .. nema nikakve veze sa mysql-om, nije relaciona baza podataka, ali satire koliko je brze od bilo koje relacione baze kada je full text pretraga u pitanju ....


A šta misliš o Sphinx?
[ bogdan.kecman @ 17.08.2009. 07:25 ] @
Citat:
Shinhan: A šta misliš o Sphinx?


ne mislim nista ... oni imaju full text search storage engine za mysql .. i to kao radi ... ali ja to nikada nisam probao tako da mi je iskustvo sa njim == 0. ono sto sam cuo od kolega je da "nije brzi od lucene-a" tako da ja i dalje navijam za lucene :) ... to kao sto napomenuh ne znaci mnogo posto ja nisam probao sphinx a konja kog nisam jahao ne bi da procenjujem na osnovu onoga sto "drugi" pricaju
[ Milos911 @ 19.08.2009. 22:37 ] @
Napisao sam odgovor ali je nestao a nije mi stiglo objasnjenje o obrisanoj poruci...
Bogdane imam ja sve tabele ali mi se ne daju jer mislim da imam par super ideja za sajt a iz ostalih tabela se lako moze zakljuciti sta sam planirao...Hvala za link, pogledao sam ali ono se oslanja na javu koliko sam mogao da primetim, a ja o njoj nemam pojma. Ali nema veze definitovno sam odlucio da ne ukljucujem pretragu po recima pesama... Hvala na pomoci.:)
[ bogdan.kecman @ 20.08.2009. 08:10 ] @
ako oces da zaobidjes javu to je sphinx (ja nisam koristio) a i ako se dobro secam bio je neki lucene port na c ...

sve u svemu - ono o cemu ti treba da razmisljas je
- pristup podacima preko primarnog kljuca je jako brz
- partitioning (trenutno nije bas 100% bug free ali dok ti se zalaufa sajt ce verovatno biti stabilno resenje)

[ ihti @ 27.08.2009. 00:42 ] @
ima Lucene port na skoro svaki popularniji jezik..

evo za PHP
Zend_Search_Lucene http://framework.zend.com/manual/en/zend.search.lucene.html
[ Milos911 @ 01.09.2009. 13:57 ] @
Najzad zavrsih konvertovanje glupe baze. I naleteh na prvi problem:
Moram da selektjem samo prvo slovo iz tabele artist. Citanjem manuala i guglanjem sam dosao do sledeceg koda:
Code:
SELECT artist FROM artist WHERE LEFT(artist, 1) ='a'

Ovo bi valjda trebalo da mi selektuje sve redove koji pocinju sa slovom a. Ali ne radi. U cemu gresim? Takodje procitao sam da je left() brze od substring(). DA li je to tacno?
[ bogdan.kecman @ 01.09.2009. 14:57 ] @
je oces da selektujes samo prvo slovo (select left(kolona,1) from tabela;) ili hoces da selektujes sve kolone koje imaju prvo slovo a (select kolona from tabela where left(kolona,1)='a';)

obrati paznju da se ne koristi index ovde vec se radi table scan - ako ces da imas cest upit ovaj - ako kazes like 'a%' koristice se index, ali ce biti mnooooooogo brze da dodas char(1) polje i u njega upises (moze i trigerom) vrednost prvog slova - a tu kolonu indexiras .. sitan duplikad podataka ali veliko ubrzanje...

inace trudi se da ti tabele i kolone nemaju isto ime ... to radi u vecini slucajeva ali ume da napravi problem - posebno u citanju upita

Code:

mysql> create table artist (artist char(10));     
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> insert into artist values ('abba'),('bebba'),('cobby'),('decca');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select artist from artist where left(artist,1)='a';
+--------+
| artist |
+--------+
| abba   | 
+--------+
1 row in set (0.05 sec)

mysql> insert into artist values ('azra');
Query OK, 1 row affected (0.00 sec)

mysql> select left(artist,1) from artist;
+----------------+
| left(artist,1) |
+----------------+
| a              | 
| b              | 
| c              | 
| d              | 
| a              | 
+----------------+
5 rows in set (0.00 sec)

mysql> select distinct left(artist,1) slovo from artist order by slovo;
+-------+
| slovo |
+-------+
| a     | 
| b     | 
| c     | 
| d     | 
+-------+
4 rows in set (0.00 sec)
[ bogdan.kecman @ 01.09.2009. 15:00 ] @
btw, left jeste brze od substring
ako ti problem pravi komparacija velikih i malih slova, promeni kolaciju nad kolonom - ako ti je kolacija binarna onda se velika i mala slova razlikuju, ako nije onda se ne razlikuju - stavi na primer utf_general_ci na primer
[ Milos911 @ 01.09.2009. 15:08 ] @
Samo prvo slovo:) Koalicija je bila problem. Hvala ti mnogo mucio bih se sa ovim do sutra i ne bih provalio u cemu je problem...
Citat:

ali ce biti mnooooooogo brze da dodas char(1) polje i u njega upises (moze i trigerom) vrednost prvog slova - a tu kolonu indexiras .. sitan duplikad podataka ali veliko ubrzanje...

Ovo cu i da uradim, mozes li samo da mi objasnis kako sa trigerom? Ako je previse komplikovano(tebi da objasnis) uradicu preko php-a, ali bih voleo da naucim kako da uradim direktno preko mysql-a.
Inace stavio sam da mi koalicija bude utf_bin(iskreno ne snalazim se previse dobro sa koalicijama pa sam izabrao ovu zato sto je utf pa da mogu i nasa slova da se upisu normalno(valjda nisam sad lupio nesto pogresno:)))
I hvala za savet za imena kolona, ja sam mislio da je svejedno pa sam za sve stavljao isto ime kolone i tabele zbog lakseg snalazenja.
I jos samo jedno pitanje: Ako stavim auto_increment vrednost za neko polje, i brojanje stigne do 1000. Sta ako ja obrisem red sa brojem 500. Da li ce ga kasnije auto_increment popuniti ili ce nastaviti da broji dalje bez obzira sto je red sabrojem 500 obrisan?

[Ovu poruku je menjao Milos911 dana 01.09.2009. u 16:21 GMT+1]
[ bogdan.kecman @ 01.09.2009. 19:19 ] @
Citat:
[url=/p2375698]
Inace stavio sam da mi koalicija bude utf_bin(iskreno ne snalazim se previse dobro sa koalicijama pa sam izabrao ovu zato sto je utf pa da mogu i nasa slova da se upisu normalno(valjda nisam sad lupio nesto pogresno:)))


imas gomilu utf8 kolacija.
Code:

mysql> show collation like 'utf%';
+--------------------+---------+-----+---------+----------+---------+
| Collation          | Charset | Id  | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci    | utf8    |  33 | Yes     | Yes      |       1 | 
| utf8_bin           | utf8    |  83 |         | Yes      |       1 | 
| utf8_unicode_ci    | utf8    | 192 |         | Yes      |       8 | 
| utf8_icelandic_ci  | utf8    | 193 |         | Yes      |       8 | 
| utf8_latvian_ci    | utf8    | 194 |         | Yes      |       8 | 
| utf8_romanian_ci   | utf8    | 195 |         | Yes      |       8 | 
| utf8_slovenian_ci  | utf8    | 196 |         | Yes      |       8 | 
| utf8_polish_ci     | utf8    | 197 |         | Yes      |       8 | 
| utf8_estonian_ci   | utf8    | 198 |         | Yes      |       8 | 
| utf8_spanish_ci    | utf8    | 199 |         | Yes      |       8 | 
| utf8_swedish_ci    | utf8    | 200 |         | Yes      |       8 | 
| utf8_turkish_ci    | utf8    | 201 |         | Yes      |       8 | 
| utf8_czech_ci      | utf8    | 202 |         | Yes      |       8 | 
| utf8_danish_ci     | utf8    | 203 |         | Yes      |       8 | 
| utf8_lithuanian_ci | utf8    | 204 |         | Yes      |       8 | 
| utf8_slovak_ci     | utf8    | 205 |         | Yes      |       8 | 
| utf8_spanish2_ci   | utf8    | 206 |         | Yes      |       8 | 
| utf8_roman_ci      | utf8    | 207 |         | Yes      |       8 | 
| utf8_persian_ci    | utf8    | 208 |         | Yes      |       8 | 
| utf8_esperanto_ci  | utf8    | 209 |         | Yes      |       8 | 
| utf8_hungarian_ci  | utf8    | 210 |         | Yes      |       8 | 
+--------------------+---------+-----+---------+----------+---------+
21 rows in set (0.00 sec)


utf8_unicode_ci je odlican .. ljudi sa nasih prostora vole da koriste utf8_slovenian_ci ... tako da koristi jedan od ta dva ... utf8_bin ti nece dati nista korisno, nece ti raditi sortiranje kako treba, poredjenje ce biti binarno (dakle velika i mala slova su razlicita) i slicno ..

Citat:

I hvala za savet za imena kolona, ja sam mislio da je svejedno pa sam za sve stavljao isto ime kolone i tabele zbog lakseg snalazenja.


jeste potpuno svejedno sto se mysql-a tice ... (vrlo redak slucaj moz da bude da ne valja) .. ali je logicki potpuno pogresno - ne kapiram kako se sa istim imenom kolone i tabele "lakse snalazis" ... pricano je vise puta o standardima i ovde i na netu .. pogledaj malo po forumu nacices sigurno ... standard postoji samo jedan i jaaaaako je bajat .. dosta stvari iz njega ljudi namerno ne postuju ... dosta ljudi ga ignorise etc... no .. nije to tema

Citat:

Ako stavim auto_increment vrednost za neko polje, i brojanje stigne do 1000. Sta ako ja obrisem red sa brojem 500. Da li ce ga kasnije auto_increment popuniti ili ce nastaviti da broji dalje bez obzira sto je red sabrojem 500 obrisan?


nece nikad popuniti taj sa 500 ako ima nesto posle njega.

ako je u pitanju myisam tabela, u tabeli se cuva "sledeci auto increment broj" i taj ce se koristiti "naredni put kada treba" cak i ako se resetuje baza etc...
ako je u pitanju innodb, kada se prvi put pristupi tabeli (od trenutka startovanja servera), innodb ce izracunati max()+1 i to ce zapamtiti kao "narednu vrednost" koju onda povecava za auto_increment_increment. Kada se baza resetuje, sledeci put se opet preracunava nova vrednost za auto increment polje.


ovo za triger .. aj videcu da nacukam neki primer .. sad sam malo u guzvi
[ bogdan.kecman @ 01.09.2009. 19:47 ] @
Citat:
mozes li samo da mi objasnis kako sa trigerom?


nisam bas dobar sa objasnjavanjem tako da .. evo ti primer kako to radi .. pa pitaj ako neki deo nije jasan:

Code:

mysql> drop table if exists t4;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create table t4 (id int auto_increment primary key, autor varchar(100), slovo char(1), key na_slovo_na_slovo (slovo)) engine=innodb;
Query OK, 0 rows affected, 4 warnings (0.01 sec)

mysql> 
mysql> drop trigger if exists naslovo_insert;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> drop trigger if exists naslovo_update;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> 
mysql> delimiter |
mysql> CREATE TRIGGER naslovo_insert BEFORE INSERT ON t4
    ->  FOR EACH ROW BEGIN
    ->    SET NEW.slovo = LEFT(NEW.autor,1);
    ->  END
    -> |
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TRIGGER naslovo_update BEFORE UPDATE ON t4
    ->  FOR EACH ROW BEGIN
    ->    IF NEW.autor <> OLD.autor THEN
    ->      SET NEW.slovo = LEFT(NEW.autor,1);
    ->    END IF;
    ->  END
    -> |
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> delimiter ;
mysql> 
mysql> insert into t4 (autor) values ('pera'), ('zika'), ('laza'), ('mika'), ('jovica'), ('mile'), ('sele'), ('stanojka'), ('milojka'), ('sarulja');
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> 
mysql> select * from t4;
+----+----------+-------+
| id | autor    | slovo |
+----+----------+-------+
|  1 | pera     | p     | 
|  2 | zika     | z     | 
|  3 | laza     | l     | 
|  4 | mika     | m     | 
|  5 | jovica   | j     | 
|  6 | mile     | m     | 
|  7 | sele     | s     | 
|  8 | stanojka | s     | 
|  9 | milojka  | m     | 
| 10 | sarulja  | s     | 
+----+----------+-------+
10 rows in set (0.00 sec)

mysql> 
mysql> update t4 set autor = 'zizelina' where id = 6;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> 
mysql> select * from t4;
+----+----------+-------+
| id | autor    | slovo |
+----+----------+-------+
|  1 | pera     | p     | 
|  2 | zika     | z     | 
|  3 | laza     | l     | 
|  4 | mika     | m     | 
|  5 | jovica   | j     | 
|  6 | zizelina | z     | 
|  7 | sele     | s     | 
|  8 | stanojka | s     | 
|  9 | milojka  | m     | 
| 10 | sarulja  | s     | 
+----+----------+-------+
10 rows in set (0.00 sec)

mysql> 
[ bogdan.kecman @ 01.09.2009. 19:53 ] @
btw ovaj primer podrazumeva da necas sam da menjas "slovo" .. kada radis update .. tako da ti dozvoljava da menjas "ostale" stvari u tabeli bez da dira slovo polje .. naravno ako hoces da budes 100% siguran ... onda izbacis ceo onaj IF deo za update i onda si siguran da ti slovo uvek ima ok vrednost (dakle napravis da update triggger radi kao i insert) .. primer (-- znaci komentar dakle IF i END IF su zakomentarisane linije):

Code:

mysql> drop trigger if exists naslovo_update;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter |
mysql> CREATE TRIGGER naslovo_update BEFORE UPDATE ON t4
    ->  FOR EACH ROW BEGIN
    ->    -- IF NEW.autor <> OLD.autor THEN
    ->      SET NEW.slovo = LEFT(NEW.autor,1);
    ->    -- END IF;
    ->  END
    -> |
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> delimiter ;
mysql> select * from t4;
+----+----------+-------+
| id | autor    | slovo |
+----+----------+-------+
|  1 | pera     | p     | 
|  2 | zika     | z     | 
|  3 | laza     | l     | 
|  4 | mika     | m     | 
|  5 | jovica   | j     | 
|  6 | zizelina | z     | 
|  7 | sele     | s     | 
|  8 | stanojka | s     | 
|  9 | milojka  | m     | 
| 10 | sarulja  | s     | 
+----+----------+-------+
10 rows in set (0.00 sec)

mysql> update t4 set slovo = 'Q' where id=4;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> select * from t4;
+----+----------+-------+
| id | autor    | slovo |
+----+----------+-------+
|  1 | pera     | p     | 
|  2 | zika     | z     | 
|  3 | laza     | l     | 
|  4 | mika     | m     | 
|  5 | jovica   | j     | 
|  6 | zizelina | z     | 
|  7 | sele     | s     | 
|  8 | stanojka | s     | 
|  9 | milojka  | m     | 
| 10 | sarulja  | s     | 
+----+----------+-------+
10 rows in set (0.00 sec)

mysql> 



kao sto vidis .. update nije "smorio" vrednost za slovo .. dakle zavisi sta hoces da izvedes ... ovo je "malo sporije" posto ce menjati i vrednost za slovo i izvrsavati funkciju LEFT() i ako menjas neki deseti atribut u slogu (zamisli da ta tabela ima jos 50 atributa) .. ali iako je malo sporije, sprecavas nekog idiota koji ne zna sta radi da ti smori vrednost u tabeli ...
[ Milos911 @ 03.09.2009. 14:28 ] @
Znaci ako sam dobro razumeo triger ce se aktivirati atomatski svaki put kad unesem novu vrednost u bazu ili kad izvrsim update? Par pitanja:
Da li se triger cuva u bazi ili moram svaki put pre inserta ili update-a da ga pozivam?
Posto mislim da se cuva u bazi da li mogu nekako da izlistam sve trigere koji su sacuvani?
Nije mi potpuno jasno na sta se odnosi ono NEW, tj sta ono radi?
I konacno za sta sluzi delimiter |?
Nadam se da ne zapitkujem mnogo :)
[ bogdan.kecman @ 03.09.2009. 14:49 ] @
Citat:
Milos911: Znaci ako sam dobro razumeo triger ce se aktivirati atomatski svaki put kad unesem novu vrednost u bazu ili kad izvrsim update?


u tom primeru imas jedan koji ce da se izvrsi pri insertu i drugi pri update-u

Citat:

Da li se triger cuva u bazi ili moram svaki put pre inserta ili update-a da ga pozivam?

cuva se.

Citat:

Posto mislim da se cuva u bazi da li mogu nekako da izlistam sve trigere koji su sacuvani?


SHOW TRIGGERS;

Citat:

Nije mi potpuno jasno na sta se odnosi ono NEW, tj sta ono radi?


http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

ime kolone.OLD je "stara vrednost" a ime kolone.NEW je nova vrednost...

ako radis INSERT onda je .OLD uvek null, ali ako radis UPDATE onda je .OLD "vrednost koja je bila pre nego si uradio update" a .NEW je nova vrednost koja ce biti upisana u tabelu

Citat:

I konacno za sta sluzi delimiter |?

http://dev.mysql.com/doc/refma.../stored-programs-defining.html
po defaultu je delimiter (kako kazes cli-u da si uneo komandu do kraja i kako ih razdvajas medjusobno) ; (tacka zarez), ali u sintaksi trigera i stored procedura se nalazi ; i ne moze da se escapeuje, zato ti promenis delimiter na neki drugi karakter, kreiras proceduru pa posle vratis to na default ;
[ Milos911 @ 07.09.2009. 14:03 ] @
Malo kasnim sa odgovorom ali bolje ikad nego nikad :)
Obicno mrzim kad je neko lenja stoka i nece da procita manual da bi nasao neke osnovne stvari. Upravo to sam ja ovde uradio i izvinjavam se zbog toga...
Hvala na objasnjenjima :)