source

Unix_timestamp()를 사용하여 INT(11) 열을 업데이트하도록 MySQL/MariaDB의 컬럼 설정

factcode 2022. 9. 22. 00:06
반응형

Unix_timestamp()를 사용하여 INT(11) 열을 업데이트하도록 MySQL/MariaDB의 컬럼 설정

UPDATE현재 Unix 타임스탬프 값으로 INT(11) 열을 자동으로 업데이트하도록 MySQL에서 열을 설정할 수 있습니까?다 해봤는데 잘 안 되는 것 같아요.다음을 사용하여 삽입의 기본값으로 사용할 수 있습니다.unix_timestamp().

아니요.

그뿐timestamp그리고.datetime데이터 타입은on update절을 클릭합니다.

그러나 MySQL의 최신 버전에서는 자동 업데이트 기능을 조합할 수 있습니다.timestamp컬럼을 unix 타임스탬프로 변환하는 계산 컬럼을 사용하여 다음과 같이 트리거할 필요가 없습니다.

create table mytable (
    id int primary key,

    -- auto-updated timestamp colum
    update_ts timestamp on update current_timestamp,

    -- unix timestamp computed from the timestamp
    unix_update_ts int as (timestampdiff(second, '1970-01-01', update_ts))
);

사용할 수 없습니다.unix_timestamp()현재로서 계산된 컬럼에서; MySQL은 이 함수의 결과가 결정적이지 않다고 가정합니다(함수가 고정된 인수가 주어졌을 때 정확하지 않습니다). 그러나 우리는 이 문제를 해결할 수 있습니다.timestampdiff().

DATETIME 또는 TIMESTAMP 컬럼을 사용하여 이 작업을 수행할 수 있습니다.

CREATE TABLE mytable (
  id SERIAL PRIMARY KEY,
  timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP()
);

다음으로 다음과 같은 UNIX 타임스탬프를 취득하기 위해 쿼리를 할 수 있습니다.

SELECT UNIX_TIMESTAMP(timestamp) AS ts FROM mytable;

MySQL 5.7은 열을 생성했지만 비결정 함수에서는 작동하지 않습니다.

mysql> ALTER TABLE mytable ADD COLUMN ts INT UNSIGNED AS (UNIX_TIMESTAMP(timestamp));
ERROR 3102 (HY000): Expression of generated column 'ts' contains a disallowed function.

트리거를 정의할 수 있습니다.

mysql> ALTER TABLE mytable ADD COLUMN ts INT UNSIGNED;
mysql> CREATE TRIGGER ts BEFORE UPDATE ON mytable FOR EACH ROW SET NEW.ts = UNIX_TIMESTAMP(NEW.timestamp);

mysql> select * from mytable;
+----+---------------------+------+
| id | timestamp           | ts   |
+----+---------------------+------+
|  2 | 2020-07-23 23:09:57 | NULL |
+----+---------------------+------+

mysql> update mytable set id = 3;

mysql> select * from mytable;
+----+---------------------+------------+
| id | timestamp           | ts         |
+----+---------------------+------------+
|  3 | 2020-07-23 23:14:05 | 1595546045 |
+----+---------------------+------------+

삽입하기 전에 일치하는 트리거도 생성해야 합니다.

언급URL : https://stackoverflow.com/questions/63064356/setting-up-a-column-in-mysql-mariadb-to-update-an-int11-column-with-the-unix-t

반응형