열의 기본값을 식으로 변경
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
'source' 카테고리의 다른 글
다른 데이터베이스를 사용하는 데이터베이스와 스키마의 차이점은 무엇입니까? (0) | 2023.07.28 |
---|---|
powershell - powershell(') 새 줄 지정 (0) | 2023.07.28 |
assertEquals() 매개 변수가 순서(예상, 실제)인 이유는 무엇입니까? (0) | 2023.07.28 |
오류 TS1005: ';'이(가) 필요합니다.node_modules 내부의 첫 번째 빌드 오류 rxjs에 대한 TypeScript Angular 6 (0) | 2023.07.28 |
모든 jquery 이벤트를 $(문서)로 바인딩해야 합니까? (0) | 2023.07.28 |