簡體   English   中英

觸發從一個數據庫到另一個數據庫的更新

[英]Trigger for update from one database to another database

我有兩個不同的數據庫DB1和DB2。 每個表分別具有兩個不同的表,表A和表B。 因此,如果表BI中生成了任何新行,都希望觸發觸發器,從而在表B中生成新行的同時為我提供表A中的日期和時間。現在,我創建了一個觸發器,如下所示,但它可以正常工作。

DELIMITER $$

USE `DB2`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trigger_update_date_time_table_A`$$

CREATE
    /*!50017 DEFINER = 'root'@'%' */
    TRIGGER `trigger_update_date_time_tableA` AFTER INSERT ON table_B 
    FOR EACH ROW 
    BEGIN
    UPDATE DB1.table_A SET Date = CURRENT_TIMESTAMP WHERE id = NEW.id 
    END;
$$

DELIMITER ;

您將不得不更具體地說明為什么您認為觸發器沒有產生預期結果的原因。 這是如何做到這一點的示例。順便說一句,如果您按此方式進行操作,您將看到觸發器按編碼方式工作。

MariaDB [SANDBOX]> USE SANDBOX;
Database changed
MariaDB [SANDBOX]> SHOW CREATE TABLE T;
+-------+---------------------------------------------------------------------------------------+
| Table | Create Table                                                                          |
+-------+---------------------------------------------------------------------------------------+
| T     | CREATE TABLE `t` (
  `ID` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [SANDBOX]> USE TEST;
Database changed
MariaDB [TEST]> SHOW CREATE TABLE TEST.T;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                   |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| T     | CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `price` int(11) DEFAULT NULL,
  `tax` int(11) DEFAULT NULL,
  `pricetax` int(11) AS (price + price *tax/100) VIRTUAL,
  `DATE` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=latin1 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [TEST]> USE SANDBOX;
Database changed
MariaDB [SANDBOX]> SHOW CREATE TRIGGER T;
+---------+--------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Trigger | sql_mode                                   | SQL Original Statement                                                                                                                                         | character_set_client | collation_connection | Database Collation |
+---------+--------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| T       | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` TRIGGER T AFTER INSERT ON T
FOR EACH ROW
BEGIN
     UPDATE TEST.T SET Date = CURRENT_TIMESTAMP WHERE id = NEW.id ;
END | utf8mb4              | utf8mb4_general_ci   | latin1_swedish_ci  |
+---------+--------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

MariaDB [SANDBOX]> TRUNCATE TABLE T;
Query OK, 0 rows affected (0.22 sec)

MariaDB [SANDBOX]> SELECT * FROM T;
Empty set (0.00 sec)

MariaDB [SANDBOX]> UPDATE TEST.T SET DATE = NULL WHERE ID = 999;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [SANDBOX]> SELECT ID,DATE FROM TEST.T;
+-----+------+
| ID  | DATE |
+-----+------+
|   1 | NULL |
| 999 | NULL |
+-----+------+
2 rows in set (0.00 sec)

MariaDB [SANDBOX]> INSERT INTO T (ID) VALUES (999);
Query OK, 1 row affected (0.02 sec)

MariaDB [SANDBOX]> SELECT ID,DATE FROM TEST.T;
+-----+------------+
| ID  | DATE       |
+-----+------------+
|   1 | NULL       |
| 999 | 2018-09-13 |
+-----+------------+
2 rows in set (0.00 sec)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM