Os gatilhos realizam a separação de dados em tempo real e dados históricos

O gatilho do MySQL realiza a separação de dados em tempo real e dados históricos

No projeto de banco de dados, muitas vezes é necessário separar os dados em tempo real dos dados históricos, de modo a garantir a pontualidade dos dados em tempo real, ao mesmo tempo em que retém os dados históricos para retrocesso e análise. Este artigo descreve como usar um gatilho MySQL (gatilho) para separar dados em tempo real de dados históricos e definir a tabela em tempo real para reter apenas os dados mais recentes.

Projeto de tabela em tempo real e tabela de histórico

Ao projetar tabelas de banco de dados, geralmente armazenamos dados em tempo real em uma tabela e dados históricos em outra. Fazer isso pode reduzir o volume de dados de uma única tabela e melhorar a eficiência da consulta.

Tomamos a tabela de usuários como exemplo e projetamos duas tabelas: tabela de tempo real (user_realtime) e tabela de histórico (user_history). Entre eles, a tabela em tempo real mantém apenas os dados mais recentes do usuário, e a tabela de histórico salva todos os dados do usuário e registra o tempo de modificação.

A estrutura da tabela de tempo real é a seguinte:

CREATE TABLE user_realtime (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    PRIMARY KEY (id)
);

A estrutura da tabela de histórico é a seguinte:

CREATE TABLE user_history (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL,
    modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

Implementação do gatilho

Precisamos definir um gatilho de inserção na tabela de tempo real. Sempre que novos dados forem inseridos, o gatilho inserirá os dados na tabela de histórico e excluirá os dados antigos da tabela de tempo real. Isso garante que apenas os dados mais recentes estejam na tabela ativa.

O código para inserir a trigger é o seguinte:

CREATE TRIGGER insert_user_realtime AFTER INSERT ON user_realtime
FOR EACH ROW
BEGIN
    -- 插入历史表
    INSERT INTO user_history(name, age) VALUES (NEW.name, NEW.age);
    -- 删除老数据
    DELETE FROM user_realtime WHERE id <> NEW.id;
END;

alcançar resultados

Agora vamos testar a implementação do gatilho.

Primeiro, insira um dado na tabela em tempo real:

INSERT INTO user_realtime(name, age) VALUES ('Tom', 20);

Há apenas um dado na tabela em tempo real:

SELECT * FROM user_realtime;
+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | Tom  |  20 |
+----+------+-----+

Há também um dado na tabela de histórico:

SELECT * FROM user_history;
+----+------+-----+---------------------+
| id | name | age | modified_time       |
+----+------+-----+---------------------+
|  1 | Tom  |  20 | 2021-12-31 15:00:00 |
+----+------+-----+---------------------+

Agora insira um novo dado e modifique os dados originais:

INSERT INTO user_realtime(name, age) VALUES ('Jerry', 25);
UPDATE user_realtime SET age = 22 WHERE id = 1;

Há apenas uma parte dos dados mais recentes na tabela em tempo real:

SELECT * FROM user_realtime;
+----+-------+-----+
| id | name  | age |
+----+-------+-----+
|  2 | Jerry |  25 |
+----+-------+-----+

Existem dois dados na tabela de histórico, um dos dados originais e um dos dados modificados:

SELECT * FROM user_history;
+----+------+-----+---------------------+
| id | name | age | modified_time       |
+----+------+-----+---------------------+
|  1 | Tom  |  20 | 2021-12-31 15:00:00 |
|  2 | Tom  |  22 | 2021-12-31 15:01:00 |
+----+------+-----+---------------------+

Resumir

Este artigo descreve como usar gatilhos MySQL para separar dados em tempo real de dados históricos e definir a tabela em tempo real para reter apenas os dados mais recentes.

Em aplicações práticas, as tabelas podem ser projetadas de acordo com as necessidades de negócios e os gatilhos podem ser usados ​​para separar dados e reter dados históricos, melhorando assim a eficiência da consulta e análise de dados.

Acho que você gosta

Origin blog.csdn.net/sinat_35773915/article/details/131758701#comments_28139470
Recomendado
Clasificación