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

Da li su mi tabele ok?

[es] :: MySQL :: Da li su mi tabele ok?

Strane: 1 2

[ Pregleda: 4140 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

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: Da li su mi tabele ok?01.09.2009. u 19:53 - pre 178 meseci
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 ...
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Da li su mi tabele ok?03.09.2009. u 14:28 - pre 178 meseci
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 :)
 
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: Da li su mi tabele ok?03.09.2009. u 14:49 - pre 178 meseci
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 ;

 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Da li su mi tabele ok?07.09.2009. u 14:03 - pre 178 meseci
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 :)
 
Odgovor na temu

[es] :: MySQL :: Da li su mi tabele ok?

Strane: 1 2

[ Pregleda: 4140 | Odgovora: 23 ] > FB > Twit

Postavi temu Odgovori

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