Полагаю, вы могли бы покончить с insert_buchung TRIGGER, но вместо этого определите столбец с помощью: -
......., Datum TEXT DEFAULT CURRENT_TIMESTAMP
или
......., Datime TEXT DEFAULT (datetime('now'))
Рассмотрим: -
DROP TABLE IF EXISTS buchung;
CREATE TABLE buchung (othercolumn TEXT, Datum TEXT DEFAULT (datetime('now')), otherDtaum TEXT DEFAULT CURRENT_TIMESTAMP);
INSERT INTO buchung (othercolumn) VALUES('x'),('y'),('z');
SELECT * FROM buchung;
Это демонстрирует и результат, и результат: -
![enter image description here](https://i.stack.imgur.com/Oc6JY.png)
т.е. Текущее время устанавливается, когда строка (и) вставлена (вставлены).
Однако , insert_buchung TRIGGER может быть ( предложение WHEN предполагает только одно условие ): -
CREATE TRIGGER IF NOT EXISTS update_buchung BEFORE UPDATE ON Buchung
WHEN old.Datum IS NOT NULL -- <<<<<<<<<<<< ADDED
BEGIN
SELECT RAISE(FAIL, "UPDATE NOT ALLOWED");
END;
Как пример: -
DROP TABLE IF EXISTS buchung;
DROP TRIGGER IF EXISTS update_buchung;
DROP TRIGGER IF EXISTS insert_buchung;
-- CREATE TABLE buchung (othercolumn TEXT, Datum TEXT DEFAULT (datetime('now')), otherDtaum TEXT DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE IF NOT EXISTS buchung (ID INTEGER PRIMARY KEY,othercolumn TEXT, Datum TEXT);
CREATE TRIGGER IF NOT EXISTS update_buchung BEFORE UPDATE ON Buchung
WHEN old.Datum IS NOT NULL
BEGIN
SELECT RAISE(FAIL, "UPDATE NOT ALLOWED");
END;
CREATE TRIGGER IF NOT EXISTS insert_buchung AFTER INSERT ON Buchung
BEGIN
update Buchung SET Datum = datetime('now') WHERE ID = NEW.ID;
END;
INSERT INTO buchung (othercolumn) VALUES('x'),('y'),('z');
SELECT * FROM buchung;
Результат: -
![enter image description here](https://i.stack.imgur.com/rSE7S.png)