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
'source' 카테고리의 다른 글
Larabel 5.2 - 커스텀프라이머리 키가 0이 되는 문자열 사용 (0) | 2022.09.22 |
---|---|
열려 있는 DB 연결 요청 수와 닫혀 있는 경우 인쇄하거나 확인할 수 있습니까?장고 (0) | 2022.09.22 |
이메일 주소의 필드 유형 및 크기를 지정할 수 있습니까? (0) | 2022.09.21 |
vue & vuex getter vs 소품 통과 상태 (0) | 2022.09.21 |
MySQL의 NOW() 및 CURDATE() 함수로 UTC를 사용하려면 어떻게 해야 합니까? (0) | 2022.09.21 |