Mislim da nema još ovog pitanja jer ga baš i nisam pronašao; pa me zanima ako je moguće dijeljenje tablica između baza tj.
Želim napraviti dvije MySQL baze sa svim tablicama istim tj imaju sve tablice iste, a želim da se sadržaj tablice user dijeli između te dvije baze, tj. ako se neko registrira u bazi 1 da je automatski dodan i u bazu 2 i obrnuto.?
ono što mi pada na pamet jest, da na svaku bazu staviš proceduru u kojoj češ imati insert (za korisnike) i pozoveš te dvije procedure jednu za drugom s istim parametrima.
njemu treba insert u bazu korisnika koji se logirao tj. u jednu i drugu bazu. [/quote]
Ne logiro , registriro. ali da zvući zanimljivo, ako se neko registrira na bazi 1 da je insertan ( dodan ) i u bazu 2, samo da ne bi na kraju možda došlo do nekog izpremješanja?
ako u jednoj i drugoj imaš tablicu user, koja je jedna te ista, tj. ista po strukturi i podacima, ne vidim razloga strahu.
ako su baze na istom serveru.
onda staviš proceduru na drugu bazu i onda ispadne to ovako:
DELIMITER $$
CREATE PROCEDURE `proba1`.`unos`(IN p INT(9), IN z VARCHAR(20))
BEGIN
START TRANSACTION;
INSERT INTO proba.osobe VALUES(p, z);
INSERT INTO proba1.neka VALUES(p,z);
COMMIT;
END$$
DELIMITER ;
i u slučaju da jedna baza nije dostupna ili ne postoji, mysql će ti javit grešku i ništa se neće zapisati.
tablicu osobe sam obrisao i dobio ovo.
Query : call unos(6,'ivo')
Error Code : 1146
Table 'proba.osobe' doesn't exist
Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `proba1`.`unos` BEFORE INSERT
ON `proba1`.`neka`
FOR EACH ROW BEGIN
DECLARE i INT;
DECLARE j VARCHAR(20);
SELECT ID,ime INTO i,j FROM neka WHERE neka.ID=NEW.ID;
INSERT INTO proba.osobe(ID,ime) VALUES(NEW.ID,NEW.ime);
END$$
DELIMITER ;
na svaku bazu dodaš ovakav triger, pa ako osoba upiše u jednu bazu, bit će automatski i u drugoj bazi.
samo pazi na ID-e.
ako su 10 korisnika, 5 ih upisuje u jednu, a 5 u drugu.
ovo nema veze ako ti ne treba ID, između jedne i druge jer neće biti isti.
ovo radi tako kad uneseš u tablicu druge baze, bit će automatski upisano i u prvoj.
ako češ staviti ovakav triger na prvu bazu, onda promijeni ono što moraš u ovom code-u.
i radit će ti obostrano.
ako ti treba update
stavi before update.
ako ti treba delete, stavi delete.
i pretražuj po imenu korisnika, a ne po ID-u ako češ koristiti trigere za brisanje ili update.
samo pazi, svaki query u trigeru je ravnopravan query-u na bazi.
to je isto kao da imaš dva query-a select i insert.
[quote=“Dragon”]Mislim da nema još ovog pitanja jer ga baš i nisam pronašao; pa me zanima ako je moguće dijeljenje tablica između baza tj.
[/quote]
E bio sam ja postavio ovo pitanje, nakon silnog istraživačkog rada (:))došao sam do zaključka da je to nemoguče. Moguče je koristeći replikaciju, ako se ne varam, no to su “napredna” pitanja.
Moguča su naravno predložena “zaobilazna rješenja”, no ja bih ti predložio da kreiraš još jednu bazu i u njoj držiš podatke o userima, to nisam isprobao pa neznam sideeffekte:cuga2: A možda je i zato već kasno.
Možda da manipulaciju korsnicima držiš u aplikaciju jer ovako igranje “ping ponga” između baza, neznam koliko je kvaliteno. No ako drugog rješenja nema, onda što se mora nije teško:).
[quote=“Lola”]ti pozivaš proceduru s tim parametrima.
call mojaprocedura(parametar1, parametar2)
automatski ako hočeš onda na trigere.
na svaku bazu dodaš ovakav triger, pa ako osoba upiše u jednu bazu, bit će automatski i u drugoj bazi.
samo pazi na ID-e.
ako su 10 korisnika, 5 ih upisuje u jednu, a 5 u drugu.
ovo nema veze ako ti ne treba ID, između jedne i druge jer neće biti isti.[/quote]
I mislio sam na ID kad sam reko dal bi bilo kakvih problema, nego daj mi smao reci što ti je kaj u ovom kodu proba proba1, nekej …
Sorry ako sam dosadan ali ne znam u mysql-u pa zato pitam
[quote=“Dragon”]I mislio sam na ID kad sam reko dal bi bilo kakvih problema, nego daj mi smao reci što ti je kaj u ovom kodu proba proba1, nekej …
Sorry ako sam dosadan ali ne znam u mysql-u pa zato pitam :D[/quote]
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `proba1`.`unos` BEFORE INSERT
ON `proba1`.`neka`
FOR EACH ROW BEGIN
INSERT INTO proba.osobe(ID,ime) VALUES(NEW.ID,NEW.ime);
END$$
DELIMITER ;
select ne treba, prvo sam mislio ovako, ali ne treba.ovo je dovoljno.
proba1 je baza2.
proba1.unos je ime trigera
proba je baza1
"osobe" -> tablica u bazi1
a u trigerima se barata sa NEW i OLD.
NEW je nova vrijednost koja se ubacila, a OLD stara vrijednost koja već postoji u bazi.
ako je sdruga baza na nekom drugom serveru onda ovo ne prolazi.
jer mysql ne podržava "insert into server.baza.tablica values(bla,bla)
podržava insert na istom serveru.
za nadobudne
ovo je view
DELIMITER $$
USE `proba1`$$
DROP VIEW IF EXISTS `prva`$$
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `prva` AS
SELECT
`neka`.`ID` AS `ID`,
`neka`.`ime` AS `ime`
FROM `neka`$$
DELIMITER ;
kad ja napravim
INSERT INTO prva VALUES(8,‘tt’)
on mi ubaci u tablicu “neka”, vrijednosti.
međutim, ovo raditi je čista glupost.
znači nije read only kao što sam rekao gore.
čitam manual, to je sad novi features u mysql-u 5.x verziji.
[quote=“trnac”]Ako želiš, možeš probati ovo. Kreiraj dvije baze na MS SQL Serveru.
BAZA1 ima tablicu LOLA (POLJE VARCHAR(100)), a druga ima view LOLA kao ovo:
use BAZA2
go
CREATE VIEW LOLA
AS
SELECT *
FROM BAZA1.dbo.LOLA
Napravi insert
use BAZA1
go
INSERT INTO LOLA (‘insert from BAZA1’)
go
use BAZA2
go
INSERT INTO LOLA (‘insert from BAZA2’)
go
probaj u bilo kojoj bazi
SELECT * FROM LOLA
Kada probaš napiši što si dobio kao rezultat. TNX[/quote]
napisao sam gore da radi, to je novi features u mysql-u.
ali zašto to raditi?
[quote=“trnac”]Napisao si dok sam ja pisao svoju litaniju.
Smisao je bio da te razuvjeri u tvojoj tvrdnji.[/quote]
pogledaj vrijeme poruka.
a za promjene imaš 10 minuta od prvog spremanja.
tvoja poruka u 21:36
moja u 21:22.
sory, nisam znao da to postoji, ali svrha postojanja view-a je filtriranje, jednostavni select iz view-a (view sadrži kompleksni query) i sakrivanje strukture baze.
[quote=“Lola”]pogledaj vrijeme poruka.
a za promjene imaš 10 minuta od prvog spremanja.
tvoja poruka u 21:36
moja u 21:22.
sory, nisam znao da to postoji, ali svrha postojanja view-a je filtriranje, jednostavni select iz view-a (view sadrži kompleksni query) i sakrivanje strukture baze.[/quote]
Misliš da ja svako malo gledam jesi li ti nešto napisao i onda kada napišem roman da samo tako lako odustanem od njega jer si ti proučio dokumentaciju?
Ma nema frke. Tu smo da idemo naprijed. Meni view koristi za “dijeljenje” tablica između baza.
Ja kada pogriješim nikad ne priznam jer i ako priznam, još uvijek mi pola krivice ostane. :zub:
ali ako imaš ovakav slučaj kao što je postavljeno pitanje, onda je jednostavnije na trigere i ne moraš raditi view ni insert, nego triger to radi za tebe.