PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql und trigger



ramonl
26-02-2006, 17:52
habe mysql 5.0 installiert und alles funzt auch, aber ich bekomme keien trigger hin...führe ich das beispiel von http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html aus, also erst

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);

und dann

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;


meckert er mit nem 1064-Fehler in "near von insert on"

was mach ich denn da ? In meiner phpinfo steht als mysql auch version 4.17, aber da stimtm wa smit der extension nicht obwohl ich da auch die neueste runtergeladen habe... aber ich habe ja mysql server 5.0 installiert und der mysql administartor zeigt auch beim server und client jeweils version 5.0x an...

was mache ich denn da falsch ?

Arbeite mit phpmyadmin,sollte ja aber egal sein !?


edit: sehe grade das das Wort "trigger" nicht farblich als schlüsselwort dargestellt wird.also kann es gar nicht gehen, habe aber die neueste 5.0.18 version...muss man trigegr noch irgendwo aktivieren ? Ich musste nach der installation auch ziemlich viel konfigurieren,aber das müsste doch trotzdem gehen ?

Turbohummel
26-02-2006, 20:39
Hab lange keine Trigger mehr entwickelt, aber müsste das nicht
BEFORE INSERT IN
statt
BEFORE INSERT ON
heißen?
Würde auch den Fehler erklären.

Das highlighting wird ja von phpmyadmin gemacht, vielleicht da mal ne aktuelle Version ziehen, ältere phpmyadmins waren ja auf mysql4 optimiert, und da gabs noch keine Trigger, deswegen kennt er diesen nicht als Schlüsselwort. Die Datenbank stört das aber eigentlich nicht.

ramonl
27-02-2006, 08:58
nein, das ist es auch nicht... egal was für ein Triggerbeispiel ich nehme, macht der immer diesen Fehler...

ninguno
27-02-2006, 11:37
na wenn du schon ein beispiel aus dem mysql reference manual verwendest, dann solltest du es auch komplett übernehmen:
DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
|

DELIMITER ;

ramonl
27-02-2006, 11:42
was denn das fürn quatsch ? Der is dafür da wenn man alle queries auf ein mal ausführen will...

nach deinem beispiel kommt diese fehlermeldung:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEG' at line 1


Habe jetzt noch mal probiert das trigger beispiel der triggerstartseite des referenze manuals zu nehmen, und da wird ein trigger erstellt, auch wenn ich ihn danach nirgendwo zur bearbeitung sehen kann...

nur passiert trotzd des trigges danach nix, wenn ich datensätze einfüge:

CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));

CREATE TRIGGER ins_sum BEFORE INSERT ON account
FOR EACH ROW SET @sum = @sum + NEW.amount;


irgendwie auch wieder ein komisches beispiel weil gar keine spalte "sum" angelegt wurde,als die tabelle erstellt wurde... aber auch mit einer von mir angelegten spalte wird da nix aufsummiert beim einfügen von datensätzen.

ninguno
27-02-2006, 12:03
im mysql reference manual steht genau drinnen warum du delimiter verwenden musst. und wenn du's machst dann funktionierts auch, habs eben ausprobiert.

ramonl
27-02-2006, 12:30
hallo ? Habe doch gerade die fehlermeldung gepostet die nach dem code kommt, den du gepostet hast...

logisch funktioniert es bei anderen, sonst wäre es ja ein riesen bug seitens mysql.
Will ja nur wissen, warum es bei mir nicht geht ?!

ninguno
27-02-2006, 12:33
könnte auch ein problem mit phpmyadmin sein. probiers halt mal mit der mysql client console.