열의 데이터 형식을 변경하고 새 기본값을 설정하는 동안 다음 오류가 발생했습니다.
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 '';