열을 변경하고 기본값을 변경하는 방법은 무엇입니까?


190

열의 데이터 형식을 변경하고 새 기본값을 설정하는 동안 다음 오류가 발생했습니다.

ALTER TABLE foobar_data ALTER COLUMN col VARCHAR(255) NOT NULL SET DEFAULT '{}';

오류 1064 (42000) : SQL 구문에 오류가 있습니다. 1 행에서 'VARCHAR (255) NOT NULL SET DEFAULT'{} ''근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.


DEFAULT 전에 SET이 필요하다고 생각하지 않습니다
Jonas T

답변:


274
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

동일한 작업을 수행하는 두 번째 가능성 (juergen_d 덕분에) :

ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';

9
column선택 사항입니다. 당신은 사용할 수 있습니다 ALTER TABLE foobar_data MODIFY col VARCHAR(255) NOT NULL DEFAULT '{}';또는 ALTER TABLE foobar_data CHANGE col col VARCHAR(255) NOT NULL DEFAULT '{}';그 결과는 동일합니다.
kapad

1
OP가 요청한 기본 문자열입니다. 행을 삽입 할 때이 열에 값을 지정하지 않으면 값이됩니다 {}.
fancyPants

1
col서로 옆에 두 개의 글씨를 쓰는 것이 맞습니까? (이 같은 col col)
Shafizadeh

4
@Shafizadeh 그렇습니다. 이를 통해 열 이름을 바꿀 수 있습니다. 첫 번째는 원래 이름이고 두 번째는 새 이름입니다.
fancyPants

3
DEFAULT값만 변경해야하는 경우에는 사용하지 마십시오 . 이것은 테이블의 모든 행을 아무것도 처리하지 않습니다 (거의 테이블에서는 매우 깁니다). ALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>즉시 사용하십시오 .
고인돌

114

후속 조치로 기본값을 설정하려면 ALTER .. SET 구문을 사용할 수 있는지 확인하십시오. 거기에 다른 모든 것을 넣지 마십시오. 나머지 열 정의를 넣으려면 허용 된 답변에 따라 MODIFY 또는 CHANGE 구문을 사용하십시오.

어쨌든 열 기본값을 설정하기위한 ALTER 구문은 (제가 여기 왔을 때 찾고 있었기 때문에) :

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';

어떤 'literal'도 숫자가 될 수 있습니다 (예 :) ...SET DEFAULT 0. 나는 그것을 시도하지 ...SET DEFAULT CURRENT_TIMESTAMP않았지만 왜 그렇지 않습니까?


5
또한 인용하면 current_timestamp가 작동하지 않았습니다. 나는 다음을 사용해야했다 :ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;
Nereis

7
+1 가장 좋은 대답입니다. 그런 식으로 열의 유형과 변경되지 않는 다른 것을 지정할 필요가 없습니다!
user2342558

2
이것은 DEFAULT값만 변경하는 효율적인 답변 입니다.
고인돌

1
디폴트 값은 삽입, 사용 시간 싶은 경우 NOW()또는 current_timestamp()@Malaise @Nereis
BlueCacti

16

이미 생성 된 열에 기본값을 추가하려면 다음과 같이하십시오.

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';

2
기존 필드 사양을 복사 할 필요가 없으므로 이것이 가장 좋습니다.
rjh

4

DEFAULT CURRENT_TIMESTAMP의 경우 :

ALTER TABLE tablename
 CHANGE COLUMN columnname1 columname1 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 CHANGE COLUMN columnname2 columname2 DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

이중 열 이름 선언에 유의하십시오

DEFAULT CURRENT_TIMESTAMP 제거 :

ALTER TABLE tablename
 ALTER COLUMN columnname1 DROP DEFAULT,
 ALTER COLUMN columnname2 DROPT DEFAULT;

왜 이중 열 이름입니까?
MKJ

2
ALTER TABLE tablename에 변경 COLUMN oldColName newColName의 columnDefinitions
레너드 Lepadatu

1

수락 된 답변이 잘 작동합니다.

의 경우 NULL 값의 잘못된 사용 에 오류, NULL의 값, 기본값으로 모든 널 값을 업데이트 하는 열에서 다음 ALTER을하려고합니다.

UPDATE foobar_data SET col = '{}' WHERE col IS NULL;

ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';

내가 필요한 것. 감사합니다
arslion

0

위의 내용이 효과가없는 경우 (예 : 새 SQL 또는 Azure 로 작업중인 경우) 다음을 시도하십시오.

1) 기존 열 제약 조건을 삭제하십시오 (있는 경우).

ALTER TABLE [table_name] DROP CONSTRAINT DF_my_constraint

2) 새로운 것을 만드십시오 :

ALTER TABLE [table_name] ADD CONSTRAINT DF_my_constraint  DEFAULT getdate() FOR column_name;

0

이 시도

ALTER TABLE `table_name` CHANGE `column_name` `column_name` data_type  NULL DEFAULT '';

이처럼

ALTER TABLE `drivers_meta` CHANGE `driving_license` `driving_license` VARCHAR(30) NULL DEFAULT '';
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.