回答:
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';
同じことを行う2番目の可能性(juergen_dのおかげ):
ALTER TABLE foobar_data CHANGE COLUMN col col VARCHAR(255) NOT NULL DEFAULT '{}';
columnオプションです。ALTER TABLE foobar_data MODIFY col VARCHAR(255) NOT NULL DEFAULT '{}';またはALTER TABLE foobar_data CHANGE col col VARCHAR(255) NOT NULL DEFAULT '{}';を使用するだけで、結果は同じになります。
{}ます。
colのsを隣同士に書くことは正しいですか?(このようにcol col)
DEFAULT値のみを変更する必要がある場合は、これを使用しないでください。これにより、テーブルのすべての行が処理されます(巨大なテーブルでは非常に長くなります)。代わりALTER TABLE <table_name> ALTER COLUMN <column_name> SET DEFAULT <value>にインスタントです。
補足として、デフォルトを設定するだけの場合は、ALTER .. SET構文を使用できることを確認してください。そこに他のすべてのものを入れないでください。残りの列定義を配置する場合は、受け入れられた回答に従って、MODIFYまたはCHANGE構文を使用します。
とにかく、列のデフォルトを設定するためのALTER構文(これは私がここに来たときに探していたものなので):
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT 'literal';
'リテラル'は数字でもかまいません(例...SET DEFAULT 0)。私はそれを試したことはありません...SET DEFAULT CURRENT_TIMESTAMPが、どうしてですか?
ALTER TABLE table_name MODIFY COLUMN column_name TIMESTAMP NOT NULL DEFAULT current_timestamp;
DEFAULT値のみを変更する効率的な答えです。
NOW()またはcurrent_timestamp()@Malaise @Nereis
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値で、その列のすべてのNULL値をデフォルト値に更新してから、変更を試みてください。
UPDATE foobar_data SET col = '{}' WHERE col IS NULL;
ALTER TABLE foobar_data MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT '{}';