mysql은 같은 now()로 여러 열을 업데이트합니다.
mysql 버전 4.1.20을 사용하여 2개의 datetime 열을 업데이트해야 합니다.이 쿼리를 사용하고 있습니다.
mysql> update table set last_update=now(), last_monitor=now() where id=1;
2개의 콜이 표시되므로 안전하고 컬럼이 다른 시각으로 갱신될 가능성이 있습니다.now()
?
다른 값으로 갱신할 수 없다고 생각합니다(내부 mysql 콜이라고 생각합니다).now()
한 줄에 한 번씩만) 하지만 저는 전문가가 아닙니다. 어떻게 생각하세요?
업데이트: 여기서 두 번째 질문이 추출되었습니다.
솔루션 발견:
mysql> UPDATE table SET last_update=now(), last_monitor=last_update WHERE id=1;
MySQL Docs에서 확인했는데 몇 가지 테스트를 거치면 다음과 같이 작동합니다.
다음 명령어는 col2를 원래 col1 값이 아닌 현재(최소) col1 값으로 설정합니다.그 결과 col1과 col2의 값이 동일합니다.이 동작은 표준 SQL과 다릅니다.
업데이트 t1 SET col1 = col1 + 1, col2 = col1;
Mysql은 그다지 영리하지 않다.여러 업데이트 또는 삽입 쿼리에서 동일한 타임스탬프를 사용하려면 변수를 선언해야 합니다.
를 사용하는 경우now()
다른 쿼리에서 현재 타임스탬프를 호출할 때마다 시스템이 현재 타임스탬프를 호출합니다.
MySQL은 스테이트먼트가 실행을 시작할 때 스테이트먼트당 1회 now()를 평가합니다.따라서 각 문마다 여러 개의 now() 콜이 표시되도록 하는 것이 안전합니다.
select now(); select now(), sleep(10), now(); select now();
+---------------------+
| now() |
+---------------------+
| 2018-11-05 16:54:00 |
+---------------------+
1 row in set (0.00 sec)
+---------------------+-----------+---------------------+
| now() | sleep(10) | now() |
+---------------------+-----------+---------------------+
| 2018-11-05 16:54:00 | 0 | 2018-11-05 16:54:00 |
+---------------------+-----------+---------------------+
1 row in set (10.00 sec)
+---------------------+
| now() |
+---------------------+
| 2018-11-05 16:54:10 |
+---------------------+
1 row in set (0.00 sec)
업데이트 쿼리를 실행하기 전에 변수에 now() 값을 저장한 후 해당 변수를 사용하여 두 필드를 모두 업데이트할 수 있습니다.last_update
그리고.last_monitor
.
이렇게 하면 now()가 한 번만 실행되고 필요한 두 열에서 동일한 값이 업데이트됩니다.
타임스탬프 컬럼의 디폴트값에는 다음 코드를 설정할 수 있습니다.CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
따라서 업데이트 시 두 열의 값은 동일합니다.
만약 당신이 정말 확신해야 한다면now()
는 2개의 쿼리를 실행할 수 있는 동일한 값을 가지고 있습니다(두 번째 질문에도 응답합니다.이 경우, 이 질문은update last_monitor = to last_update
그렇지만last_update
아직 갱신되지 않았습니다.)
다음과 같은 작업을 수행할 수 있습니다.
mysql> update table set last_update=now() where id=1;
mysql> update table set last_monitor = last_update where id=1;
어쨌든 나는 mysql이 충분히 영리하다고 생각한다.now()
1 쿼리당 1회만.
여기에는 2가지 방법이 있습니다.
먼저 now()를 변수로 선언한 후 sql 문에 삽입하는 것이 좋습니다.예를 들어,
var x = now();
mysql> UPDATE table SET last_update=$x, last_monitor=$x WHERE id=1;
논리적으로 last_monitor에 다른 입력을 원할 경우 다음과 같은 변수를 추가합니다.
var y = time();
mysql> UPDATE table SET last_update=$x, last_monitor=$y WHERE id=1;
이렇게 하면 mysql 문뿐만 아니라 프로젝트에서 사용하는 서버 측 스크립트 언어(PHP 등)에서도 변수를 가능한 한 많이 사용할 수 있습니다.이러한 변수는, 애플리케이션의 프런트 엔드의 폼에 입력으로서 삽입할 수 있습니다.이것에 의해, 프로젝트가 정적이 아니고 동적이 됩니다.
두 번째로 now()가 업데이트 시간을 나타내는 경우 mysql을 사용하여 행 속성을 타임스탬프로 지정할 수 있습니다.행을 삽입하거나 업데이트할 때마다 시간도 업데이트됩니다.
언급URL : https://stackoverflow.com/questions/3802256/mysql-update-multiple-columns-with-same-now
'source' 카테고리의 다른 글
.class 파일을 컴파일하는 데 사용되는 jdk 버전을 확인하는 방법 (0) | 2022.09.16 |
---|---|
단말기에서 MAMP의 MySQL에 액세스 (0) | 2022.09.16 |
Ruby on Rails Database.yml 파일의 MySQL 구성을 수정합니다. (0) | 2022.09.16 |
Larabel에서 외부 API로 HTTP 요청 수행 (0) | 2022.09.16 |
jQuery를 사용하여 URL에서 쿼리 문자열 가져오기 (0) | 2022.09.16 |