programing

MariaDB 구문 지원 이상함

starjava 2023. 7. 31. 21:00
반응형

MariaDB 구문 지원 이상함

몇 가지 MariaDB 인스턴스가 있습니다(예: 10.1.17, 10.1.25 및 10.2.6).

저는 10.2.6과 10.1.17에서 실행되는 SQL을 만들었는데 10.1.25에서는 실행되지 않고 그 이유를 모르겠습니다.

ALTER TABLE FOOBAR ALTER CREATED SET DEFAULT NOW();

SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 'NOW()' 근처에서 사용할 올바른 구문을 확인하십시오.

10.1.25에서 작동하는 것은CREATE TABLE하지만 오직 그곳에서만 그리고 오직CURRENT_TIMESTAMP대신에NOW().

CREATE TABLE `FOOBAR` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `CREATED` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

저도 노력했지만 그것도 안 됩니다.

ALTER TABLE FOOBAR ALTER CREATED SET DEFAULT CURRENT_TIMESTAMP;

문제를 재현할 수 없습니다.

MariaDB [_]> SELECT VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 10.1.25-MariaDB |
+-----------------+
1 row in set (0.00 sec)

MariaDB [_]> DROP TABLE IF EXISTS `FOOBAR`;
Query OK, 0 rows affected (0.00 sec)

MariaDB [_]> CREATE TABLE `FOOBAR` (
    ->   `ID` bigint(20) NOT NULL AUTO_INCREMENT,
    ->   `CREATED_0` DATETIME DEFAULT NOW(),
    ->   `CREATED_1` DATETIME DEFAULT CURRENT_TIMESTAMP(),
    ->   `CREATED_2` TIMESTAMP DEFAULT NOW(),
    ->   `CREATED_3` TIMESTAMP DEFAULT CURRENT_TIMESTAMP(),
    ->   `CREATED_4` DATETIME,
    ->   `CREATED_5` DATETIME,
    ->   PRIMARY KEY (`ID`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

MariaDB [_]> SHOW CREATE TABLE `FOOBAR`\G
*************************** 1. row ***************************
       Table: FOOBAR
Create Table: CREATE TABLE `FOOBAR` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `CREATED_0` datetime DEFAULT CURRENT_TIMESTAMP,
  `CREATED_1` datetime DEFAULT CURRENT_TIMESTAMP,
  `CREATED_2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `CREATED_3` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `CREATED_4` datetime DEFAULT NULL,
  `CREATED_5` datetime DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

테이블 만들기 :: 기본값

...

MariaDB 10.2.1 이전에는 삽입 시 평가할 식을 제공하거나 함수를 제공할 수 없었습니다.대신 일정한 기본값을 제공해야 했습니다.한 가지 예외는 삽입 시 현재 타임스탬프를 사용하기 위해 TIMESTAMP 열의 기본값으로 CURRENT_TIMESTAMP를 사용할 수 있다는 것입니다.

...

10.0.1로 시작하는 MariaDB

CURRENT_TIMESTAMP의 기본값으로 사용할 수도 있습니다.DATETIME

그러나 다음 문은 실패합니다.

MariaDB [_]> ALTER TABLE `FOOBAR`
    ->   ALTER COLUMN `CREATED_4` SET DEFAULT NOW();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
                    that corresponds to your MariaDB server version for the
                    right syntax to use near 'NOW()' at line 2

MariaDB [_]> ALTER TABLE `FOOBAR`
    ->   ALTER COLUMN `CREATED_5` SET DEFAULT CURRENT_TIMESTAMP();
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
                    that corresponds to your MariaDB server version for the
                    right syntax to use near 'CURRENT_TIMESTAMP()' at line 2

ALTER

...

10.2.1로 시작하는 MariaDB

DEFAULT그리고 표정으로.DROP CONSTRAINTMariaDB 10.2.1에 도입되었습니다.

...


MariaDB 10.2.1에서

문장:

MariaDB [_]> ALTER TABLE `FOOBAR`
    -> ALTER COLUMN `CREATED_4` SET DEFAULT NOW(),
    -> ALTER COLUMN `CREATED_5` SET DEFAULT CURRENT_TIMESTAMP();

작동합니다. db<>dbdle을 참조하십시오.

사용할 수 있습니다: ALTER TABLEtable_name더하다type타임스탬프가 NULL이 아님 기본값 현재_타임스탬프 이후name;

언급URL : https://stackoverflow.com/questions/45210755/mariadb-syntax-support-weird

반응형