Tipo de dados MySQL TIMESTAMP

Resumo : neste tutorial, você aprenderá sobre TIMESTAMPo tipo de dados MySQL e como usá-lo para definir colunas que armazenam dados de carimbo de data/hora.

Introdução ao tipo de dados MySQL TIMESTAMP

O MySQL é um tipo de dadosTIMESTAMP temporal que contém a combinação de data e hora . O formato de a  é fixado em 19 caracteres.TIMESTAMPYYYY-MM-DD HH:MM:SS

O TIMESTAMPvalor varia de '1970-01-01 00:00:01'UTC a '2038-01-19 03:14:07'UTC.

Quando você insere um TIMESTAMPvalor em uma tabela, o MySQL o converte do fuso horário da sua conexão para UTC para armazenamento.

Quando você consulta um TIMESTAMPvalor, o MySQL converte o valor UTC de volta para o fuso horário da sua conexão. Essa conversão não ocorre para outros tipos de dados temporais, como DATETIME.

Por padrão, o fuso horário da conexão é o fuso horário do servidor MySQL. Você também tem a opção de usar um fuso horário diferente ao se conectar ao servidor MySQL.

Ao recuperar um TIMESTAMPvalor que foi inserido por um cliente em um fuso horário diferente, você receberá um valor diferente daquele armazenado no banco de dados.

No entanto, desde que não altere o fuso horário, você poderá recuperar o TIMESTAMPvalor armazenado originalmente.

Exemplo de fuso horário MySQL TIMESTAMP

Vamos dar um exemplo para ver como o MySQL lida com TIMESTAMPvalores.

Primeiro, criei uma nova tabela chamada tque possui uma TIMESTAMPcoluna: t1;

CREATE TABLE t (
   ts TIMESTAMP
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, defina o fuso horário da sessão como '+00:00'UTC usando a SET time_zoneinstrução.

SET time_zone='+00:00';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, insira um TIMESTAMPvalor na ttabela.

INSERT INTO t(ts)
VALUES('2008-01-01 00:00:01');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, selecione o TIMESTAMPvalor da ttabela.

SELECT ts FROM t;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------+
| ts                  |
+---------------------+
| 2008-01-01 00:00:01 |
+---------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Quinto, defina o fuso horário da sessão para um fuso horário diferente para observar qual valor recebemos do servidor de banco de dados:

SET time_zone ='+03:00';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por fim, consulte os dados da tabela:

SELECT ts FROM t;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+---------------------+
| ts                  |
+---------------------+
| 2008-01-01 03:00:01 |
+---------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Como você pode ver, recebemos um valor de tempo ajustado ao novo fuso horário, diferente do original.

Inicialização e atualização automática para colunas TIMESTAMP

Considere o seguinte exemplo.

Primeiro, crie uma tabela chamada   categories:

CREATE TABLE categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Na categoriestabela, a created_atcoluna é uma TIMESTAMPcoluna cujo valor padrão é definido como CURRENT_TIMESTAMP.

Segundo, insira uma nova linha na categoriestabela sem especificar o valor da created_atcoluna:

INSERT INTO categories(name) 
VALUES ('A');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
SELECT * FROM categories;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL TIMESTAMP - Inicialização Automática

A saída indica que o MySQL usou o carimbo de data/hora no momento da inserção como valor padrão para a created_atcoluna.

Portanto, uma  TIMESTAMPcoluna pode ser inicializada automaticamente com o carimbo de data/hora atual para linhas inseridas que não especificam nenhum valor para a coluna. Esse recurso é chamado de inicialização automática .

Terceiro, adicione uma nova coluna nomeada updated_atà categoriestabela:

ALTER TABLE categories
ADD COLUMN updated_at 
  TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
  ON UPDATE CURRENT_TIMESTAMP;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O valor padrão da updated_atcoluna é CURRENT_TIMESTAMP.

E temos uma nova cláusula ON UPDATE CURRENT_TIMESTAMPque segue a DEFAULT CURRENT_TIMESTAMPcláusula. Vamos ver seu efeito.

Quarto, insira uma nova linha na categoriestabela.

INSERT INTO categories(name)
VALUES('B');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quinto, consulte os dados da categoriestabela:

SELECT * FROM categories;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL TIMESTAMP - Atualização Automática

O valor padrão da coluna created_até o carimbo de data/hora em que a linha foi inserida.

Sexto, atualize o valor na coluna namedo ID da linha 2:

UPDATE categories 
SET name = 'B+'
WHERE id = 2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Sétimo, consulte os dados da categoriestabela para verificar a atualização:

SELECT *
FROM categories
WHERE id = 2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
MySQL TIMESTAMP - recurso de atualização automática

Observe que o valor na updated_atcoluna mudou para o carimbo de data/hora no momento em que a linha foi atualizada.

A capacidade de uma TIMESTAMPcoluna ser atualizada automaticamente para o carimbo de data/hora atual quando o valor em qualquer outra coluna na linha muda de seu valor atual é chamada de atualização automática .

A coluna updated_até chamada de coluna atualizada automaticamente.

Observe que se você executar a UPDATEinstrução para atualizar o mesmo valor da namecoluna, a updated_atcoluna não será atualizada.

UPDATE categories 
SET name = 'B+'
WHERE id = 2;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O valor no updated_atpermanece inalterado.

MySQL TIMESTAMP - recurso de atualização automática

Para obter mais informações sobre inicialização e atualização automáticas, verifique o tempo de inicialização .

A partir do MySQL 5.6.5, as DATETIME colunas também possuem inicialização automática e recursos de atualização. Além disso, o DEFAULT_CURRENT_TIMESTAMPe ON UPDATE CURRENT TIMESTAMPpode ser aplicado a várias colunas.

Resumo

  • Use o TIMESTAMPtipo de dados MySQL para representar valores de data e hora.
  • Defina o DEFAULT CURRENT_TIMESTAMPatributo de uma TIMESTAMPcoluna para inicializar automaticamente a coluna com o carimbo de data/hora atual quando uma nova linha for inserida.
  • Defina o ON UPDATE CURRENT_TIMESTAMPatributo para atualizar o carimbo de data/hora sempre que a linha for modificada.
  • O MySQL armazena os TIMESTAMPvalores no formato UTC, mas os converte para o fuso horário da sessão atual quando exibido.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *