我有一个包含几列的表格;
datetime_end, datetime_start, 持续时间
当灯打开时,插入行并且仅填充datetime_start。当灯关闭时,datetime_end和持续时间被填满。 我想要一个触发器,一旦写入datetime_end,就会改变持续时间40秒(持续时间=持续时间-40)。
DELIMITER //
CREATE TRIGGER trigger_light_test
BEFORE UPDATE ON light_test
FOR EACH ROW
BEGIN
IF OLD.duration > 50 THEN
SET NEW.duration = OLD.duration - 45;
END IF;
END; //
DELIMITER ;
触发器创建得很好但没有做任何事情......即使灯亮了70秒......有什么想法吗?
答案 0 :(得分:0)
OLD
包含UPDATE
发布前 表中的记录。 在这种情况下,那是NULL
,所以您始终将始终评估为NULL > 50
的{{1}}进行比较。您希望与FALSE
中的值进行比较,该值是记录 的值, ,以及您在其中操作的值触发。
NEW
答案 1 :(得分:-2)
很长一段时间我使用了触发器但是,如果我正确理解了您的问题,您希望触发器在>更新后运行。 不会是:
private void highlightReportRowsIfImportant(TextField txt_adressnummer) {
tv_berichte.setRowFactory(new Callback<TableView<DatabaseReport>, TableRow<DatabaseReport>>() {
@Override
public TableRow<DatabaseReport> call(TableView<DatabaseReport> tableView) {
final TableRow<DatabaseReport> row = new TableRow<DatabaseReport>() {
@Override
protected void updateItem(DatabaseReport report, boolean empty) {
super.updateItem(report, empty);
if (report != null) {
if (report.getReport_art().contains("!!!")) {
setStyle("-fx-background-color: #FF0000;");
} else {
setStyle("");
}
} else {
setStyle("");
}
}
};
reports.addListener(new ListChangeListener<DatabaseReport>() {
@Override
public void onChanged(ListChangeListener.Change<? extends DatabaseReport> change) {
if (row.getItem() != null) {
if (row.getItem().getReport_art().contains("!!!")) {
row.setStyle("-fx-background-color: #FF0000;");
} else {
row.setStyle("");
}
} else {
row.setStyle("");
}
}
});
row.setOnDragDetected(event -> {
if (!row.isEmpty()) {
Dragboard db = row.startDragAndDrop(TransferMode.COPY);
db.setDragView(row.snapshot(null, null));
ClipboardContent cc = new ClipboardContent();
cc.putString(row.getItem().getReport_content());
db.setContent(cc);
event.consume();
}
});
row.setOnDragOver(event -> {
Dragboard db = event.getDragboard();
if (db.hasContent(DataFormat.PLAIN_TEXT)) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
event.consume();
}
});
row.setOnDragDropped(event -> {
Dragboard db = event.getDragboard();
if (db.hasContent(DataFormat.PLAIN_TEXT)) {
reportFlowController.addNewReport(username, getSqlTimeStamp().toString(), txt_adressnummer.getText(), reports, db.getString());
event.setDropCompleted(true);
event.consume();
}
});
return row;
}
});
}