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

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

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

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



답변

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 '{}';


답변

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

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

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

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


답변

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

ALTER TABLE Persons
ALTER credit SET DEFAULT 0.0';


답변

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;


답변

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

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

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

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


답변

위의 내용이 효과가없는 경우 (예 : 새 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;


답변

이 시도

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 '';