Mysql更新触发器更改值

时间:2016-01-15 13:11:20

标签: mysql triggers

我有一个包含几列的表格;

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秒......有什么想法吗?

2 个答案:

答案 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;
                }
            });
        }