Rene K. schrieb:
Ich weiß, das MySQL die Reihe nicht updated wenn die Werte die gleichen
sind. Das ist natürlich auch völlig sinvoll.
Nun habe ich aber einen Sonderfall, ich eine Tabelle in welcher der
Status eines mehrerer Services gespeichert wird. Dort befindet sich auch
ein Timestamp on update - nun ist die Sache so, das der Status der
Services mit 0 gespeichert werden, und dann das Datum beim ändern (oder
eben nicht) gespeichert wird.
Jedoch ändert sich natürlich das Timestamp on update nicht, weil ja der
Status bei der nächsten Prüfung wieder 0 ist und somit kein Update
stattfindet.
Kann man sich das irgendwie erzwingen, das MySQL dies dennoch als Update
sieht?!
Es würde mich doch SEHR wundern, wenn zuträfe, was Du sagst. Eine Richtige Datenbank (tm) wie PostgreSQL verhält sich jedenfalls nicht so: da wird in einer Triggerfunktion die "updatedAt"-Spalte gesetzt, und so befinden sich neue Werte im Record, der dann selbstverständlich auch geschrieben wird.
create.sql:
1 |
DROP TABLE IF EXISTS ding;
|
2 |
|
3 |
CREATE TABLE ding (
|
4 |
id SERIAL PRIMARY KEY,
|
5 |
createdAt TIMESTAMP DEFAULT NOW(),
|
6 |
updatedAt TIMESTAMP DEFAULT NOW(),
|
7 |
zahl INTEGER
|
8 |
);
|
9 |
|
10 |
CREATE OR REPLACE FUNCTION ding_on_update()
|
11 |
RETURNS TRIGGER AS $$
|
12 |
BEGIN
|
13 |
NEW.updatedAt = NOW();
|
14 |
RETURN NEW;
|
15 |
END;
|
16 |
$$ LANGUAGE 'plpgsql';
|
17 |
|
18 |
CREATE OR REPLACE TRIGGER ding_update_trigger
|
19 |
BEFORE UPDATE ON ding
|
20 |
FOR EACH ROW EXECUTE FUNCTION ding_on_update();
|
21 |
|
22 |
INSERT INTO ding(zahl) VALUES (1), (2), (3), (4);
|
update.sql:
1 |
UPDATE ding SET zahl = 2 WHERE zahl = 2;
|
2 |
UPDATE ding SET zahl = 4 WHERE zahl = 4;
|
Der Code funktioniert mit PostgreSQL einwandfrei. Wenn MySQL das anders macht (abgesehen von syntaktischen Unterschieden, natürlich), dann ist das wohl ein guter Moment, Deine Entscheidung für MySQL einmal intensiv zu überdenken. :-)