source

열의 기본값을 식으로 변경

factcode 2023. 7. 28. 22:57
반응형

열의 기본값을 식으로 변경

DBMS 측에서 기존 열 기본값을 '기본값 없음'에서 '내일 날짜'로 변경하려고 합니다.


보다 구체적인 내용:

테이블에 데이터 행을 삽입하면 기본적으로 삽입 타임스탬프에 있는 열에 내일 날짜가 표시됩니다.

사용된 도구:

  • debian-linux-gnu용 MariaDB v15.1(작업에 CLI 'MariaDB 모니터' 사용)
  • Debian GNU/Linux 9(확장)를 데이터 센터의 가상 서버로 사용
  • UTF-8 변속기가 있는 퍼티 v0.65

변경을 시작하기 위한 일반적인 SQL 명령은 다음과 같습니다.

ALTER TABLE test
    CHANGE COLUMN tomorrow
        tomorrow date not null default (EVIL-EXPRESSION);

위의 코드 샘플에 있는 'EVIL-EXPRESSION'다음과 같은 가능성에 대한 자리 표시자일 뿐입니다.

default (date_add(curdate(), interval 1 day))

또는

default (adddate(current_date(), 1))

또는

default (now() + interval 1 day)

또는

default (today + interval 1 day)
# today is a column declared before actual column 'tomorrow'

오류 코드 결과가 동일한 다른 변형/ 별칭도 있습니다.

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 '(date_add(curdate(), interval 1 day))'
at line 1

Google로 인해 이 오류 번호 '1064(42000)'는 괄호가 일치하지 않음을 나타냅니다.저는 꽤 확신합니다, 여기는 그렇지 않습니다.그리고 그때가 되면, 저는 확실히 휴일이 필요합니다. ;)


공식 MariaDB 문서로 인해 버전 10.2+ 이후의 기본 문에서는 식을 사용할 수 있습니다.

또한 이 기사에는 이 기능이 포함되어 있습니다. 저에게는 작동하지 않는 예가 있습니다('변경 테이블'-문 포함).DEFAULT Clause 섹션까지 아래로 스크롤합니다.

천재가 지적한 것처럼 나의 실수는 사악한 캐릭터도 비난받을 수 없습니다.


아마도 마리아DB의 버그?

물론 기본값 없이 서버 사이트 PHP 스크립트를 사용하여 문제를 해결할 수 있습니다.하지만 저는 좀 더 편안한 원스톱 서비스를 위해 데이터베이스에 아웃소싱하는 것에 관심이 있습니다. ;)

저는 모든 입력에 감사합니다. 그래서 브레인스토밍을 시작합시다 - 제 뇌는 담배를 피우고 있으니까요. ;)

CREATE TABLE::DEFAULT. 사용 중인 MariaDB 버전을 확인하십시오.

테스트:

MariaDB [_]> SELECT VERSION();
+-------------------------+
| VERSION()               |
+-------------------------+
| 10.3.8-MariaDB-1:10.3.8 |
+-------------------------+
1 row in set (0.000 sec)

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

MariaDB [_]> CREATE TABLE IF NOT EXISTS `test` (
    ->   `id` SERIAL,
    ->   `today` DATE NOT NULL DEFAULT CURRENT_DATE,
    ->   `tomorrow` DATE
    -> );
Query OK, 0 rows affected (0.001 sec)

MariaDB [_]> DESC `test`\G
*************************** 1. row ***************************
  Field: id
   Type: bigint(20) unsigned
   Null: NO
    Key: PRI
Default: NULL
  Extra: auto_increment
*************************** 2. row ***************************
  Field: today
   Type: date
   Null: NO
    Key: 
Default: curdate()
  Extra: 
*************************** 3. row ***************************
  Field: tomorrow
   Type: date
   Null: YES
    Key: 
Default: NULL
  Extra: 
3 rows in set (0.001 sec)

MariaDB [_]> ALTER TABLE `test`
    ->   CHANGE COLUMN `tomorrow`
    ->   `tomorrow` DATE NOT NULL DEFAULT (`today` + INTERVAL 1 DAY);
Query OK, 0 rows affected (0.004 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [_]> DESC `test`\G
*************************** 1. row ***************************
  Field: id
   Type: bigint(20) unsigned
   Null: NO
    Key: PRI
Default: NULL
  Extra: auto_increment
*************************** 2. row ***************************
  Field: today
   Type: date
   Null: NO
    Key: 
Default: curdate()
  Extra: 
*************************** 3. row ***************************
  Field: tomorrow
   Type: date
   Null: NO
    Key: 
Default: (`today` + interval 1 day)
  Extra: 
3 rows in set (0.001 sec)

MariaDB [_]> INSERT INTO `test` (`id`) SELECT NULL;
Query OK, 1 row affected (0.000 sec)
Records: 1  Duplicates: 0  Warnings: 0

MariaDB [_]> SELECT
    ->   `id`,
    ->   `today`,
    ->   `tomorrow`
    -> FROM
    ->   `test`;
+----+------------+------------+
| id | today      | tomorrow   |
+----+------------+------------+
|  1 | 2000-01-01 | 2000-01-02 |
+----+------------+------------+
1 row in set (0.000 sec)

당신의 오류인 것 같습니다: 그리고 당신은 단락 체계를 놓쳤습니다.

default (adddate(current_date(), 1)

그들을 세어보세요: 당신은 3을 열고 2만 닫습니다!

언급URL : https://stackoverflow.com/questions/51788592/change-default-value-of-column-to-expression

반응형